2016-03-25 5 views
0

Angenommen, ich habe ein Dokument, das die folgendes enthält:Abfrage, die Array sucht und gibt ein Objekt Element

var userSchema = Schema({ 
    _id: Number, 
    fName: String, 
    lName: String, 
    email: String, 
    braintreeflag : {type:Boolean, default: false}, 
    balance: {type:Number, default: 0}, 
    braintreeId : {unique:true, type:Number, default:0}, 
    notificationHubTag: String, 
    defaultPaymentMethod: Number, 
    braintreeTokens : [{id: Number, token : String}] 
}); 

exports.getDefaultPaymentMethodToken = function(uId,defaultId, res){ 
    //TODO query 
} 

Ich möchte sehen in dem Dokument, in dem _id: uid und ich möchte das Array-Element zu finden, wo id : defaultId und gibt dann das Token in diesem Element zurück. Suchen Sie auf SO, fand ich, was wie die beste Lösung aussieht, aber es ist nicht getestet:

User.findOne({_id:uId, 'braintreeTokens.id': defaultId}, {'braintreeTokens.$':1}, function(err,user){ 
     }) 
+0

Was wenn mehrere Personen den gleichen Nachnamen haben? – Saleem

Antwort

0

Versuchen:

db.collection.aggregate([ 
    {$unwind:"$employees"}, 
    {$match:{"employees.lastName":"Doe"}} 
]) 

Diese Abfrage wird zurückkehren Sie ein oder mehrere Dokumente mit lastName = "Doe"

+0

Da Sie das MongoDB-Beispieldokument entfernt haben, ist diese Lösung nahezu irrelevant geworden. Wenn Sie eine andere Lösung suchen, würde ich vorschlagen, eine andere Frage zu stellen, anstatt die ursprüngliche zu ändern. – Saleem

Verwandte Themen