Mongodb - 查询对象数组,但只有 return 个 属性
Mongodb - Query Array of Objects, but only return one property
我不认为这是重复的,但如果我错了请纠正我。无论如何,我只想return "apple" 和匹配用户对象电子邮件地址的客户成员角色。我正在使用 $elemMatch,但是 return 是整个客户对象,我只想要 "member" 属性,仅此而已。
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"orange" : "yes",
"customers" : [
{
"name" : "Jay Smith",
"email" : "jaysmith@example.com",
"member" : "silver",
},
{
"name" : "Sarah Carter",
"email" : "sarahcarter@example.com",
"member" : "gold",
},
{
"name" : "Jack Whatever",
"email" : "jackwhatever@example.com",
"member" : "gold",
},
]
}
理想的返回结果是:
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"member" : "gold"
}
甚至这样就足够了:
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"orange" : "yes",
"customers" : [
{"member" : "gold"}
]
}
这是我目前拥有的:
ItemsModel.find({ _id: { $in: _.pluck(user.items, 'itemId') }, active: true},
{apple: 1, customers: {$elemMatch: {email: user.email}} },
function(error, items) {
if (error) { return next(error); }
req.payload = {};
req.payload.items = items;
next();
});
任何帮助将不胜感激。这可能吗?谢谢!
ItemsModel.aggregate([
{ $unwind: '$customers' },
{ $match: { _id: { $in: _.pluck(user.items, 'itemId'), 'customers.email': user.email } },
{ $project : { _id:1 , apple:1, member:'$customers.member' }}
], function(err, res){
// rest of your code here
})
会给你
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"member" : "gold"
}
我不认为这是重复的,但如果我错了请纠正我。无论如何,我只想return "apple" 和匹配用户对象电子邮件地址的客户成员角色。我正在使用 $elemMatch,但是 return 是整个客户对象,我只想要 "member" 属性,仅此而已。
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"orange" : "yes",
"customers" : [
{
"name" : "Jay Smith",
"email" : "jaysmith@example.com",
"member" : "silver",
},
{
"name" : "Sarah Carter",
"email" : "sarahcarter@example.com",
"member" : "gold",
},
{
"name" : "Jack Whatever",
"email" : "jackwhatever@example.com",
"member" : "gold",
},
]
}
理想的返回结果是:
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"member" : "gold"
}
甚至这样就足够了:
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"orange" : "yes",
"customers" : [
{"member" : "gold"}
]
}
这是我目前拥有的:
ItemsModel.find({ _id: { $in: _.pluck(user.items, 'itemId') }, active: true},
{apple: 1, customers: {$elemMatch: {email: user.email}} },
function(error, items) {
if (error) { return next(error); }
req.payload = {};
req.payload.items = items;
next();
});
任何帮助将不胜感激。这可能吗?谢谢!
ItemsModel.aggregate([
{ $unwind: '$customers' },
{ $match: { _id: { $in: _.pluck(user.items, 'itemId'), 'customers.email': user.email } },
{ $project : { _id:1 , apple:1, member:'$customers.member' }}
], function(err, res){
// rest of your code here
})
会给你
{
"_id" : ObjectId("54d24e5df2878d40192beabd"),
"apple" : "yes",
"member" : "gold"
}