查找文档,如果它的'id'是另一个集合子文档的一部分

时间:2018-04-05 01:36:08

标签: mongodb

我想做query on nested fields

的'完全相反'
  • db.inventory.find( { "size.uom": "in" } )

  • db.inventory.find( { "in": "size.uom" } )

详细信息,我在enter集合中有一个这样的文档:

{
    "_id" : "iiED3kBWDLenD9fC4",
    "added" : ISODate("2018-04-04T20:32:49.295Z"),
    "teammember" : {
        "member" : [ 
            "JmfSvvP57LwKhRYZZ", 
            "hevxqtcxm3ftKd4ki"
        ]
    }
}

所以,如果我们有

var bobyo = enter.teammember.member;
// console.log() give [ 'JmfSvvP57LwKhRYZZ', 'hevxqtcxm3ftKd4ki' ]

如何在user集合中执行查询,以查找idbobyo元素之一的用户(错误查询,只是为了提出这个想法):

users.find ({"_id": "bobyo"}, {fields: {"_id": 1}})

返回

users.find ({"_id": "JmfSvvP57LwKhRYZZ"}, {fields: {"_id": 1}})

users.find ({"_id": "hevxqtcxm3ftKd4ki"}, {fields: {"_id": 1}})

修改/溶液 解决方案是使用$in运算符。

2 个答案:

答案 0 :(得分:0)

尝试以下查询

db.users.aggregate([
  { $lookup: {
    from: "enter",
    localField: "_id",
    foreignField: "teammember.member",
    as: "enter"
  }
}])

答案 1 :(得分:0)

解决方案是使用$in运算符。

所以,查询将是:

var bobyo = enter.teammember.member;
var selector = {_id: {$in: bobyo}};
var options = {fields: {_id: 1}};

return users.find(selector, options);

David Weldon blogPublished Secrets标题)中找到答案(Meteor特殊情况)。