我是MongoDB的新手,我试图在集合A
中查找文档,其中字段_id
等于集合excel_template
中的字段B
}}
var r = db.B.find({"name":/.*aco.*/}, {excel_template:1, _id:0}).excel_template;
db.A.find({"_id":{$eq: "${r}" }})
但我很难做到。它给了我一个结果,但没有给我任何结果。任何建议将不胜感激
答案 0 :(得分:7)
db.B.find({ "name": /.*aco.*/ }, { "excel_template": 1, "_id": 0 })
不会将单个文档返回cursor
,而是返回与上述查询条件匹配的文档。
您可以使用 distinct()
方法从与上述查询匹配的文档中返回excel_template
值数组,并在另一个查询中使用该数组,如: / p>
var r = db.B.distinct("excel_template", { "name": /.*aco.*/ });
db.A.find({ "_id": { "$in": r } });
OR
MongoDB 3.2及更新版本:
您还可以使用聚合框架,其中 $lookup
管道将提供加入两个集合的功能,并在单个操作中运行查询
db.B.aggregate([
{ "$match": { "name": /.*aco.*/ } },
{
"$lookup": {
"from": "A",
"localField": "excel_template",
"foreignField": "_id",
"as": "bList"
}
}
])