使用另一个查询的结果在MongoDB中查找文档

Leu*_*noe 4 mongodb mongodb-query robo3t

我是MongoDB的新手,我正在尝试在集合中查找文档A,其中field _id等于excel_template来自集合的字段B.

var r = db.B.find({"name":/.*aco.*/}, {excel_template:1, _id:0}).excel_template;
db.A.find({"_id":{$eq: "${r}" }})
Run Code Online (Sandbox Code Playgroud)

但我很难做到这一点.它给了我一个结果,但没有给我任何结果.任何建议将不胜感激

chr*_*dam 8

find将a返回cursor给匹配的文档.所以查询

db.B.find({ "name": /.*aco.*/ }, { "excel_template": 1, "_id": 0 })
Run Code Online (Sandbox Code Playgroud)

不会将单个文档返回给cursor符合上述查询条件的文档.

您可以使用该distinct()方法excel_template从与上述查询匹配的文档中返回值数组,并在另一个查询中使用该数组,如下所示:

var r = db.B.distinct("excel_template", { "name": /.*aco.*/ });
db.A.find({ "_id": { "$in": r } });
Run Code Online (Sandbox Code Playgroud)

要么


MongoDB 3.2及更新版本:

您还可以使用聚合框架,其中$lookup管道将提供加入两个集合的功能,并在单个操作中运行查询

db.B.aggregate([
    { "$match": { "name": /.*aco.*/ } },
    {
        "$lookup": {
            "from": "A",
            "localField": "excel_template",
            "foreignField": "_id",
            "as": "bList"
        }
    }
])
Run Code Online (Sandbox Code Playgroud)