MongoDB聚合框架方法的多文档查询



我正在研究组织过滤的最佳方法。我有以下文档格式:

{
 _id: "info",
 ids: ["id1", "id2", "id3"]
}
{
 _id: "id1",
 value: 5
}
{
 _id: "id2",
 value: 1
}
{
 _id: "id3",
 value: 5
}

我需要进行以下查询:从文档"info"中按 id 获取所有文档,然后按值 5 过滤掉它们。因此,该结果将是这样的:

{
 _id: "id1",
 value: 5
}
{
 _id: "id3",
 value: 5
}

我想我需要在 id 上展开,但是我如何选择与这些值匹配的所有文档?或者,也许我应该以某种方式使用$in运算符来获取所有文档,然后进行过滤?

任何帮助都是必要的。谢谢。

如果它只是MongoDB shell/script,我会这样做:

db.ids.find({ _id: { $in: db.ids.findOne({ _id: "info" }).ids }, value: 5 })

使用以下内容,您也有更差的版本:

  • eval命令:

    db.runCommand({
        eval: function(value) {
            var ids = db.ids.findOne({ _id: "info" }).ids;
            return db.ids.find({ _id: { $in: ids }, value: value }).toArray();
        },
        args: [5]
    })
    
  • $where 运算符(性能低,因为您使用 5 对每个候选结果执行一个查找value(:

    db.ids.find({
        value: 5,
        $where: "db.ids.findOne({ _id: 'info', ids: this._id })"
    })
    

但是,如果您尝试通过 MongoDb 驱动程序运行查询,则情况可能会有所不同。

相关内容

  • 没有找到相关文章

最新更新