5

特定のユーザーIDに関連付けられているクーポンのリストを返し、_merchant参照を入力しようとしています。

このクエリは、_merchantrefを正しく入力します。追加できれば:

ここで、coupon.users.contains(myuserid)をクエリに追加して、必要なものを取得します

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

または、このクエリは、必要な正しいクーポンを見つけます。追加できれば:

私のクエリにpopulate(_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つのクエリのハイブリッドが必要です。

4

2 に答える 2

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); })
于 2013-02-14T07:05:22.540 に答える
0

$allオプションを使用します。db.couponModel.find({users: {$all:[req.params.id]}}).populate('_merchant').exec(function(err, クーポン) { console.log(クーポン); })

于 2014-12-29T07:27:10.423 に答える