2016-11-05 74 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,有時第二雙眼睛可以修復它!謝了哥們! –