MongoDB聚合框架方法,用于多文档查询

时间:2013-09-27 01:17:48

标签: mongodb mapreduce aggregation-framework

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

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

{
 _id: "id1",
 value: 5
}

{
 _id: "id2",
 value: 1
}

{
 _id: "id3",
 value: 5
}

我需要进行以下查询:从doc“info”获取id的所有文档,然后按值5过滤掉它们。因此,结果将类似于:

{
 _id: "id1",
 value: 5
}

{
 _id: "id3",
 value: 5
}

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

任何帮助都是有针对性的。感谢。

1 个答案:

答案 0 :(得分:0)

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

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

您还有更糟糕的版本使用:

  • eval command

    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 operator(效果不佳,因为您使用value为每个候选结果执行一次查找5):

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

但是如果你试图通过MongoDb驱动程序运行查询,那么故事可能会有所不同。