问题:如何在mongo查找中选择所有(选定的)记录?即使我认为我选择取回两个结果,似乎在RoboMongo中仅返回一个结果?
在这种情况下,它是一组“ X / Y”,因此它们需要与$匹配,除非我不开始将它们合并到一个字段中,否则我会相信。在经典的SQL查询中,我可能会写类似
select x,y from map_table where (x = 69 and y = 69) or (x = 68 and y = 69)
我相信这将返回两行。也许我使事情变得过于复杂,或者我的模型有一个错误,但这不适用于mongodb。
背景:我正在编写一个坐标为“ X / Y”的应用程序,数据库中的一个经典磁贴由一个内部包含这两个变量的对象组成。我以“ X / Y”的相同顺序获得了复合索引。在开发过程中,我意识到只返回一条记录,并开始将查询放入RoboMongo并进行检查。最终的想法是一次性选择20-100个磁贴。
db.map.find({"$or" : [{
"$and" : [
{
"X" : 69
},
{
"Y" : 69
}
],
"$and" : [
{
"X" : 68
},
{
"Y" : 69
}]
}]
})
该查询的结果实际上是:
{“ _id”:ObjectId(“ 580aabcd7ad9aa2b404af79f”),“ X”:68,“ Y”:69,“ ID”:4830}
我会期望什么?
{“ _id”:ObjectId(“ 580aabcd7ad9aa2b404af79f”),“ X”:68,“ Y”:69,“ ID”:4830}
{“ _id”:ObjectId(“ 580aabcd7ad9aa2b404af89f”),“ X”:69,“ Y”:69,“ ID”:4830}
如果第二个$ and子句更改为69,69,它将显示该特定记录,我不知道为什么会这样,也许我缺少有关如何在mongodb中“查找”记录的一些关键信息。
如果仔细看,括号位置不正确。
不正确-12
db.map.find({
$or: [{
$and: [{}, {}],
$and: [{}, {}]
}]
})
正确-14
db.map.find({
$or: [{
$and: [{}, {}]
}, {
$and: [{}, {}]
}]
})
因此将您的查询更改为
db.map.find({
"$or": [{
"$and": [{
"X": 69
}, {
"Y": 69
}]
}, {
"$and": [{
"X": 68
}, {
"Y": 69
}]
}]
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句