2014-11-14 23 views
7

Tôi muốn chạy truy vấn sau trong golang bằng cách sử dụng mgo trong một đường ống.MongoDB trong Go (golang) với mgo: cách sử dụng toán tử logic để truy vấn?

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

Tôi đã nhìn khắp mọi nơi, nhưng tôi không thể tìm thấy một ví dụ như thế này. Tôi đã thử nhiều kết hợp khác nhau, ví dụ:

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

mà biên dịch một cách chính xác, không tìm thấy bất cứ điều gì. Bất kỳ ý tưởng?

Cảm ơn bạn trước

Trả lời

17

truy vấn Mongo của bạn có thể được dịch như sau:

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

Truy vấn nên tương đương với sau trong Mongo console:

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

Nếu bạn muốn sử dụng bản đồ không có thứ tự, bson.M, nó sẽ như sau:

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

Cảm ơn bạn rất nhiều! Nó hoạt động hoàn hảo. –

+0

Chào mừng bạn! Bạn đã bỏ lỡ mảng/slice, do đó, khóa là [] interface {} – ANisus

+0

Tôi đã sao chép dán ví dụ bson.D của bạn và tôi nhận được "ngoại lệ: Đối tượng đặc tả giai đoạn đường ống phải chứa chính xác một trường". – FuriousGeorge

Các vấn đề liên quan