Mongo数据库查询至少一个属性,但更理想的是所有属性

时间:2016-01-07 14:58:52

标签: json mongodb filtering

     "structure":{  
            "country":{  
               "name":"Some Country"
            },
            "city":{  
               "name":"Some City"
            },
            "building":{  
               "name":"Some Building"
            },
            "floor":{  
               "name":""
            }
       }

我有一个像上面这样的对象的集合。我需要查询集合,因此它只能产生一个项目。

查询应包括所有四个字段的过滤器:国家/地区,城市,建筑物和楼层。

如果所有四个匹配都是理想情况。

如果集合中没有此类对象,则查询应返回包含3个匹配项和一个为空的项。

如果没有三场比赛,则其他两场比赛应为空。

同样只匹配一个字段。

重要的是,其他不匹配的字段为空。没有任何不匹配的价值,只有""空的空间。

如何为此编写mongo查询?

查询对我有用:

    db.structures.find({"some query that I do no know here"}: {
                 "Some Country", 
                 "Some City", 
                 "Some Building", 
                 "Some Floor"
              });

此查询将从上面返回json对象,但它在集合中是对象:

"structure":{  
        "country":{  
           "name":"Some Country"
        },
        "city":{  
           "name":"Some City"
        },
        "building":{  
           "name":"Some Building"
        },
        "floor":{  
           "name":"Some Floor"
        }
   }

它将被返回,因为它有所有四个匹配。

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的需要...... 要搜索与您的4个值匹配的数据,请求应如下所示:

db.structures.find({
      "country.name":"Some Country", 
      "city.name":"Some City", 
      "building.name":"Some Building", 
      "floor.name":"Some Floor"
});

答案 1 :(得分:0)

这是我提出的解决方案。

db.structures.findOne({$or:
                  [
                  {$and:[
                    {"country.name": "Some Country"},
                    {"city.name": "Some City"},
                    {"building.name": "Some Building"},
                    {"floor.name": "Some Floor"}]
                   },
                  {$and:[
                    {"country.name": "Some Country"},
                    {"city.name": "Some City"},
                    {"building.name": "Some Building"},
                    {"floor.name": ""}]
                  },
                  {$and:[
                    {"country.name": "Some Country"},
                    {"city.name": "Some City"},
                    {"building.name": ""},
                    {"floor.name": ""}]
                  },
                  {$and:[
                    {"country.name": "Some Country"},
                    {"city.name": ""},
                    {"building.name": ""},
                    {"floor.name": ""}]
                  }]
              });