0

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

{
 _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 运算符来获取所有文档,然后进行过滤?

任何帮助都是合适的。谢谢。

4

1 回答 1

0

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

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 驱动程序运行查询,情况可能会有所不同。

于 2013-09-27T10:16:55.467 回答