2013-02-13 20 views
5

Ich versuche, eine Liste von Gutscheinen, die mit einer bestimmten Benutzer-ID verknüpft sind, zurückzugeben und die _merchant-Referenzen aufzufüllen.Mongoose verschachtelte Population Abfrage

Diese Abfrage füllt die _merchant-Referenzen korrekt aus. Wenn ich könnte hinzufügen:

wo coupon.users.contains (myuserid) auf meine Anfrage, die erhalten würde, was ich brauche

db.couponModel.find().populate('_merchant').exec(function(err, coupons) { 
    res.send(coupons); 
}); 

Oder diese Abfrage findet die richtigen Coupons, die ich brauche. Wenn ich hinzufügen könnte:

befüllen (_merchant) zu meiner Abfrage, die auch bekommen würde, was ich brauche.

db.userModel.findById(req.params.id).populate('coupons').exec(function(err, user) { 
    res.send(user.coupons) 
}); 

Schemen

var userSchema = new Schema({ 
    email: { type: String, required: true , unique: true }, 
    coupons: [{ type: Schema.ObjectId, ref: 'Coupon' }] 
}); 

var couponSchema = new Schema({ 
    _merchant: { type: Schema.ObjectId, ref: 'Merchant', required: true }, 
    couponid: { type: Number, required: true, unique: true }, 
    users: [{ type: Schema.ObjectId, ref: 'User' }] 


}); 

var merchantSchema = new Schema({ 
    name: { type: String, required: true , unique: true } 
    coupons: [{ type: ObjectId, ref: 'Coupon' }], 

}); 

Ich brauche einige Hybrid dieser beiden Abfragen zu bekommen, was ich will.

+0

Ich denke, das Auffüllen von eingebetteten Dokumenten von eingebetteten Dokumenten wird noch nicht unterstützt. Siehe https://github.com/LearnBoost/mongoose/issues/601#issuecomment-6520568 – idursun

+0

Ich denke, dass es in der Veröffentlichung vor ein paar Tagen unterstützt wird, aber es gibt noch keine Dokumente dafür. Irgendwelche Hacks um es zu umgehen? $ Vielleicht verwenden? – user1071182

+0

https://github.com/LearnBoost/mongoose/pull/1292 – user1071182

Antwort

0

Verwenden $ alle Option. db.couponModel.find ({Benutzer: {$ all: [req.params.id]}}). Populate ('_ merchant'). Exec (Funktion (Fehler, Coupons) {console.log (Coupons);})