Mongoose嵌套填充查询

时间:2013-02-13 12:48:19

标签: node.js mongodb mongoose

我正在尝试返回与特定用户ID相关联的优惠券列表,并填充_merchant引用。

此查询正确填充_merchant引用。如果我可以添加:

coupon.users.contains(myuserid)到我的查询会得到我需要的东西

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

或者此查询找到我需要的正确优惠券。如果我可以添加:

填充(_merchant)到我的查询,这也将得到我需要的东西。

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

架构

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' }],

});

我需要这两个查询的混合来获得我想要的东西。

2 个答案:

答案 0 :(得分:5)

使用$ all选项计算出来。此处的示例:https://github.com/LearnBoost/mongoose/blob/master/test/query.test.js#L396 http://docs.mongodb.org/manual/reference/operator/all/#_S_all

最终查询代码:

db.couponModel.find({users: {$all:[req.params.id]}}).populate('_merchant').exec(function(err, coupons) { console.log(coupons); })

答案 1 :(得分:0)

使用 $ all 选项。 db.couponModel.find({users:{$ all:[req.params.id]}})。populate('_ merchant')。exec(function(err,coupons){console.log(coupons);})< / p>