2015-02-04 94 views
0

我不认为这是重复的,但请纠正我,如果我错了。无论如何,我只想返回“apple”和与用户的对象电子邮件地址相匹配的客户成员角色。我使用$ elemMatch,但返回整个客户对象,我只想要“成员”属性,就是这样。Mongodb - 查询对象数组,但只返回一个属性

{ 
    "_id" : ObjectId("54d24e5df2878d40192beabd"), 
    "apple" : "yes", 
    "orange" : "yes", 
    "customers" : [ 
     { 
      "name" : "Jay Smith", 
      "email" : "[email protected]", 
      "member" : "silver", 
     }, 
     { 
      "name" : "Sarah Carter", 
      "email" : "[email protected]", 
      "member" : "gold", 
     }, 
     { 
      "name" : "Jack Whatever", 
      "email" : "[email protected]", 
      "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(); 
      }); 

任何帮助真的很感激。这甚至有可能吗?谢谢!

回答

3
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" 
} 
+0

我得到它的客户:“成员”:“黄金”],而不是作为“会员”:“金”,但我还是会纪念这是正确的答案。天才的东西。谢谢! – Justin

+2

糟糕,应该是会员:'$ customers.member'。我修改了我的答案 –

相关问题