2016-11-05 39 views
0

问题:如何在mongo中选择所有(选定)记录?它似乎只返回RoboMongo中的一个结果,尽管我认为我选择了返回两个结果?如何在mongo中选择所有(选定)记录?

在这种情况下,它是一组“X/Y”,所以他们需要与$匹配,我相信,除非我开始将它们合并到一个字段中。在经典SQL查询中,我可能会写类似于

select x,y from map_table where (x = 69 and y = 69) or (x = 68 and y = 69) 

我相信这会返回两行。也许我做的事情太复杂了,或者我的模型中有一个错误,这不适用于mongodb。

背景:我正在写一个坐标为“X/Y”的应用程序,在我的DB中包含一个包含这两个变量的对象。我有相同的顺序“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它会显示特定记录,我不知道为什么会发生这种情况,也许我错过了一些关于如何在mongodb中“查找”记录的关键信息。

回答

1

如果仔细观察,括号内的位置不正确。

错误 -

db.map.find({ 
    $or: [{ 
     $and: [{}, {}], 
     $and: [{}, {}] 
    }] 
}) 

正确 -

db.map.find({ 
    $or: [{ 
     $and: [{}, {}] 
    }, { 
     $and: [{}, {}] 
    }] 
}) 

因此改变你的查询

db.map.find({ 
    "$or": [{ 
     "$and": [{ 
      "X": 69 
     }, { 
      "Y": 69 
     }] 
    }, { 
     "$and": [{ 
      "X": 68 
     }, { 
      "Y": 69 
     }] 
    }] 
}) 
+0

我觉得真的很傻,现在:-D,有时第二双眼睛可以修复它!谢了哥们! –