2014-11-14 27 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