Mongoshell 中的 JavaScript

Mongoshell 中的 JavaScript

我想在 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数组 ,这将使用集合中的文档填充聚合结果中的数组。ordiniordiniordini

当我在 mongo shell 上运行此脚本时,没有出现任何错误,但也没有结果

shellmongo仅隐式打印语句中返回的最后一个值。如果要在 for 循环内打印输出,则应使用显式print()。有关示例,请参阅:mongo在Shell中迭代游标

相关内容