如何在mongo查找中选择所有(选定的)记录?

时间:2016-11-05 12:39:23

标签: mongodb-query

问题:如何选择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中的记录。

1 个答案:

答案 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
        }]
    }]
})