Mongodb 查询和构建对象字典的索引

Mongodb 查询和构建对象字典的索引,mongodb,mongodb-query,Mongodb,Mongodb Query,MongoDB版本:3.6 我们有以下结构 { ... “飞机”:{ “TAIL_1”:{ “注册”:“TAIL_1”, “wifi”是真的, ... }, “TAIL_2”:{ “注册”:“TAIL_2”, “wifi”错误 ... } ... } } 如何查询将wifi设置为true/false的飞机的所有文档 如何构建索引以加速此类查询 看起来,如果相反,它会更容易,但我想知道我可以用这样的对象做什么。谢谢您可以使用: db.getCollection().find({ $where:f

MongoDB版本:3.6

我们有以下结构

{
...
“飞机”:{
“TAIL_1”:{
“注册”:“TAIL_1”,
“wifi”是真的,
...
},
“TAIL_2”:{
“注册”:“TAIL_2”,
“wifi”错误
...
}
...
}
}
  • 如何查询将wifi设置为true/false的飞机的所有文档
  • 如何构建索引以加速此类查询
  • 看起来,如果相反,它会更容易,但我想知道我可以用这样的对象做什么。谢谢

    您可以使用:

    db.getCollection().find({
    $where:function(){
    用于(目标飞机中的var键){
    如果(obj.aircraft[key].wifi==true){
    返回真值
    }
    }
    }
    }).forEach(结果=>{
    打印(结果)
    })
    
    需要注意的一点是,
    $where
    执行全表扫描,这可能会影响性能


    对于索引/未来查询,我认为您使用数组的想法更简单。或者,您可能希望将文档扁平化为每个“尾部”1个文档,您可以使用
    $group
    来恢复聚合管道中与原始文档相似的结构。

    是的,谢谢。我们最终重构并使用了一个数组
    db.getCollection(<collection name>).find({
        $where: function(){
            for(var key in obj.aircraft){
                if(obj.aircraft[key].wifi == true){
                    return true
                }
            }
        }
    }).forEach(result => {
        print(result) 
    })