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

使用另一个查询的结果在MongoDB中查找文档,mongodb,mongodb-query,robo3t,Mongodb,Mongodb Query,Robo3t,我是MongoDB新手,我正在尝试在集合A中查找文档,其中字段\u id等于集合B中的字段excel\u模板 var r = db.B.find({"name":/.*aco.*/}, {excel_template:1, _id:0}).excel_template; db.A.find({"_id":{$eq: "${r}" }}) 但我很难做到这一点。它没有给我结果,但它应该给我一个结果。如果您有任何建议,我们将不胜感激。将返回匹配文档。所以这个问题 db.B.find({ "name"

我是MongoDB新手,我正在尝试在集合
A
中查找文档,其中字段
\u id
等于集合
B
中的字段
excel\u模板

var r = db.B.find({"name":/.*aco.*/}, {excel_template:1, _id:0}).excel_template;
db.A.find({"_id":{$eq: "${r}" }})
但我很难做到这一点。它没有给我结果,但它应该给我一个结果。如果您有任何建议,我们将不胜感激。

将返回匹配文档。所以这个问题

db.B.find({ "name": /.*aco.*/ }, { "excel_template": 1, "_id": 0 })
将不返回单个文档,而是返回与上述查询条件匹配的文档

您可以使用方法从与上述查询匹配的文档中返回
excel\u模板
值数组,并在其他查询中使用该数组,如中所示:

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


MongoDB 3.2及更新版本:

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

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

db.A.find({“\u id”:{$in:r}})
?…
无法规范化查询:BadValue$in需要一个数组
,如果
var r=db.B.find({“name”:/*aco.*/},{excel\u模板:1,\u id:0});db.A.find({“\u id”:{$in:r.excel\u template})
?…
错误:{“$err”:“无法规范化查询:BadValue$in需要数组”,“code”:17287}
您运行的mongo版本是什么?