我想在 mongodb 中进行连接查询。Mongo 没有任何连接运算符,因此我必须将查询分为两部分。首先:
var a = db.articoli.find({_id: 4010}, {ordini:1});
var b = a[0].ordini;
获得var a中的articoli数组;var b将是一个ordini数组,这个数组的每个值都是集合ordini的id。
然后:
for (var i = 0; i < b.lenght; i++) {
db.ordini.find({_id: b[i]}).pretty())
}
但是当我在 mongo shell 上运行此脚本时,没有出现任何错误,但也没有结果。如果我在 shell 中使用此命令:
db.ordini.find({_id: b[0]}).pretty())
我获得了请求的文档。为什么如果我将指令放入 for 循环中,shell 却没有给我任何返回值???
答案1
MongoDB 支持$lookup
操作员自 3.2 版(2015 年 12 月)起。$lookup
您可以使用左外连接对未分片集合进行操作,在 MongoDB 3.6+ 中,语法已扩展为允许其他连接条件和不相关的子查询。
实现连接结果的示例查询如下:
db.articoli.aggregate([
{ $match: {
_id: 4010
}},
{ $lookup: {
from: "ordini",
localField: "ordini",
foreignField: "_id",
as: "ordini"
}}
])
假设原始文档包含一个主键值articoli
数组 ,这将使用集合中的文档填充聚合结果中的数组。ordini
ordini
ordini
当我在 mongo shell 上运行此脚本时,没有出现任何错误,但也没有结果
shellmongo
仅隐式打印语句中返回的最后一个值。如果要在 for 循环内打印输出,则应使用显式print()
。有关示例,请参阅:mongo
在Shell中迭代游标。