【发布时间】:2016-01-11 06:09:25
【问题描述】:
"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"
}
}
它将被返回,因为它具有所有四个匹配项。
【问题讨论】:
-
如果您可以构建一些测试用例,在其中使用一些示例文档填充测试集合,并为每个测试用例提供带有示例文档的查询的预期输出,那真的会有很长的路要走。
-
@chridam 请检查编辑。
-
感谢您的编辑,但仍然不确定我是否正确解决了您的问题:因此,如果楼层名称是“Some Floor”作为查询值之一,而其他三个值在数据库中匹配,您希望查询返回楼层名称值为空的文档吗?
-
我认为只用一个查询是不可能的。有类似 14 种不同的匹配组合(1 种匹配所有四种,3 种匹配 3,6 种匹配 2,4 种匹配 1)
-
我认为您正在查询中寻找
$or运算符。