我正在研究组织过滤的最佳方法。我有以下文件格式:
{
_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运算符来获取所有文档,然后进行过滤?
任何帮助都是有针对性的。感谢。
答案 0 :(得分:0)
如果它只是MongoDB shell /脚本,我会这样做:
db.ids.find({ _id: { $in: db.ids.findOne({ _id: "info" }).ids }, value: 5 })
您还有更糟糕的版本使用:
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驱动程序运行查询,那么故事可能会有所不同。