Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Mongodb-查询对象数组,但只返回一个属性_Arrays_Node.js_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

Arrays Mongodb-查询对象数组,但只返回一个属性

Arrays Mongodb-查询对象数组,但只返回一个属性,arrays,node.js,mongodb,mongoose,mongodb-query,Arrays,Node.js,Mongodb,Mongoose,Mongodb Query,我不认为这是重复的,但如果我错了,请纠正我。无论如何,我只想返回“apple”和与用户对象电子邮件地址匹配的客户成员角色。我使用$elemMatch,但它返回整个customer对象,我只需要“member”属性,就是这样 { "_id" : ObjectId("54d24e5df2878d40192beabd"), "apple" : "yes", "orange" : "yes", "customers" : [ {

我不认为这是重复的,但如果我错了,请纠正我。无论如何,我只想返回“apple”和与用户对象电子邮件地址匹配的客户成员角色。我使用$elemMatch,但它返回整个customer对象,我只需要“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"
}
我会给你

{
    "_id" : ObjectId("54d24e5df2878d40192beabd"),
    "apple" : "yes",
    "member" : "gold"
}
我会给你

{
    "_id" : ObjectId("54d24e5df2878d40192beabd"),
    "apple" : "yes",
    "member" : "gold"
}
我会给你

{
    "_id" : ObjectId("54d24e5df2878d40192beabd"),
    "apple" : "yes",
    "member" : "gold"
}

我以客户身份获得:[“会员”:“黄金”],而不是“会员”:“黄金”,但我仍会将此标记为正确答案。天才的东西。非常感谢。Oops,应该是成员:“$customers.member”。我已经修改了我的回答,我以客户身份获得:[“会员”:“黄金”],而不是“会员”:“黄金”,但我仍会将此标记为正确答案。天才的东西。非常感谢。Oops,应该是成员:“$customers.member”。我已经修改了我的回答,我以客户身份获得:[“会员”:“黄金”],而不是“会员”:“黄金”,但我仍会将此标记为正确答案。天才的东西。非常感谢。Oops,应该是成员:“$customers.member”。我已经修改了我的回答,我以客户身份获得:[“会员”:“黄金”],而不是“会员”:“黄金”,但我仍会将此标记为正确答案。天才的东西。非常感谢。Oops,应该是成员:“$customers.member”。我修改了我的答案