多文档查询的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 })"
})