2014-11-14 49 views
7

我想在管道中使用mgo在golang中運行以下查詢。MongoDB in Go(golang)with mgo:如何使用邏輯運算符來查詢?

{"key1" : 1, 
"$or" : [{"key2" : 2}, {"key3" : 2}]} 

我看到處處都是,但是我找不到像這樣的例子。我嘗試了很多不同的組合,例如:

... 
pipeline := []bson.M{ 
        bson.M{ "$match" : bson.M{ "key1" : 1, 
                "$or" : bson.M{ "key2" : 2, "key3" : 2}, 
        } 
        ... 
      } 

編譯正確,沒有找到任何東西。有任何想法嗎?

預先感謝您

回答

17

你蒙戈查詢可以被翻譯爲以下幾點:

pipeline := bson.D{ 
    {"key1", 1}, 
    {"$or", []interface{}{ 
     bson.D{{"key2", 2}}, 
     bson.D{{"key3", 2}}, 
    }}, 
} 

查詢應該是等同於蒙戈控制檯以下:

db.mycollection.find({"key1" : 1, "$or" : [{"key2" : 2}, {"key3" : 2}]}) 

如果你寧願使用無序地圖,bson.M,它會是這樣的:

pipeline := bson.M{ 
    "key1": 1, 
    "$or": []interface{}{ 
     bson.M{"key2": 2}, 
     bson.M{"key3": 2}, 
    }, 
} 
+0

非常感謝!它完美的作品。 – 2014-11-14 15:21:43

+0

歡迎!你錯過了array/slice,所以關鍵是[] interface {} – ANisus 2014-11-14 15:23:30

+0

我拷貝了你的bson.D例子,我得到了「異常:一個流水線階段規範對象必須只包含一個字段。」 – FuriousGeorge 2015-02-03 21:19:43