我正在研究组织过滤的最佳方法。我有以下文档格式:
{
_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 驱动程序运行查询,则情况可能会有所不同。