使用另一个查询的结果在MongoDB中查找文档
我是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"
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版本是什么?