"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"
}
}
它将被返回,因为它有所有四个匹配。
答案 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": ""}]
}]
});