Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多文档查询的MongoDB聚合框架方法_Mongodb_Mapreduce_Aggregation Framework - Fatal编程技术网

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

多文档查询的MongoDB聚合框架方法,mongodb,mapreduce,aggregation-framework,Mongodb,Mapreduce,Aggregation Framework,我正在寻找组织过滤的最佳方法。我有以下文件格式: { _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

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

{
 _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 })
您还可以使用以下更糟糕的版本:

  • 或:

  • 或者(性能低下,因为您使用
    值对每个候选结果执行一次查找)
    5):


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

Hi,不,这将从一种语言调用,而不是从shell调用。我将做其他的操作,比如一起做值的和,等等。在你的例子中,这似乎是不可能的,因为这仅仅是两个带$In运算符的嵌套查询。在我的例子中,这可能是巨大的,从数百万个文档列表中搜索多达十万个文档:)我想在这种情况下,它要么是聚合框架,要么是map\reduce。是的,map reduce功能强大。我没有为您的示例找到map reduce解决方案。
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]
})
db.ids.find({
    value: 5,
    $where: "db.ids.findOne({ _id: 'info', ids: this._id })"
})