【问题标题】:Mongodb - Query Array of Objects, but only return one propertyMongodb - 查询对象数组,但只返回一个属性
【发布时间】:2015-04-04 12:38:36
【问题描述】:

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

{
    "_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();
            });

任何帮助将不胜感激。这甚至可能吗?谢谢!

【问题讨论】:

    标签: arrays node.js mongodb mongoose mongodb-query


    【解决方案1】:
    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"
    }
    

    【讨论】:

    • 我将其作为客户:[“member”:“gold”],而不是“member”:“gold”,但我仍会将其标记为正确答案。天才的东西。谢谢!
    • 糟糕,应该是成员:'$customers.member'。我修改了答案
    猜你喜欢
    • 2022-11-15
    • 2021-11-14
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多