问题:如何选择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 }
如果第二个$和子句更改为69,69,它将显示该特定记录,我不知道为什么会发生这种情况,也许我错过了一些关于如何&#34的重要信息;发现" mongodb中的记录。
答案 0 :(得分:1)
如果仔细观察,括号定位不正确。
不正确 - 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
}]
}]
})