将 Mongo 查询转换为 Mgo 查询
Convert Mongo query to Mgo query
我正在尝试从 mongo 文档中检索所有 id 和 field2,如果 field1 等于某个值并且 field2 存在。
示例:
Mongo 文档:
{
"id": "id1"
"field1": "val1"
"field2": "val2"
"field3": "val3"
}
{
"id": "id2"
"field1": "val4"
"field3": "val5"
}
结果
{
"id" : "id1"
"field2": "val2"
}
我发现 mongodb 查询有效:
dbname.find( { $and: [ { "field1": "val1" }, { "field2": { $exists: true } } ] } , {"id":1, "field2":1})
但我想使用 Mgo 包在 Go 中调用此查询。我无法使用 Mgo 转换此 mongo 查询调用。我尝试了几种方法,但它们似乎没有用。有人可以帮我吗?
谢谢
逻辑 AND 是默认值,因此您可以慷慨地将其省略:
dbname.find({"field1": "val1", "field2": {$exists: true}, {"id": 1, "field2": 1})
在mgo
中:
一般只用一个bson.M
map value for each brackets (where keys must be string
values). For projection use Query.Select()
.
sess := ... // Acquire an mgo session
c := sess.DB("dbname").C("collname") // Use your db name and collection name
var docs []bson.M
err := c.Find(bson.M{
"field1": "val1",
"field2": bson.M{"$exists": true},
}).Select(bson.M{"id": 1, "field2": 1}).All(&docs)
if err != nil {
// Handle err
log.Printf("Query error: "%v", err)
return
}
// Process results
我正在尝试从 mongo 文档中检索所有 id 和 field2,如果 field1 等于某个值并且 field2 存在。
示例: Mongo 文档:
{
"id": "id1"
"field1": "val1"
"field2": "val2"
"field3": "val3"
}
{
"id": "id2"
"field1": "val4"
"field3": "val5"
}
结果
{
"id" : "id1"
"field2": "val2"
}
我发现 mongodb 查询有效:
dbname.find( { $and: [ { "field1": "val1" }, { "field2": { $exists: true } } ] } , {"id":1, "field2":1})
但我想使用 Mgo 包在 Go 中调用此查询。我无法使用 Mgo 转换此 mongo 查询调用。我尝试了几种方法,但它们似乎没有用。有人可以帮我吗?
谢谢
逻辑 AND 是默认值,因此您可以慷慨地将其省略:
dbname.find({"field1": "val1", "field2": {$exists: true}, {"id": 1, "field2": 1})
在mgo
中:
一般只用一个bson.M
map value for each brackets (where keys must be string
values). For projection use Query.Select()
.
sess := ... // Acquire an mgo session
c := sess.DB("dbname").C("collname") // Use your db name and collection name
var docs []bson.M
err := c.Find(bson.M{
"field1": "val1",
"field2": bson.M{"$exists": true},
}).Select(bson.M{"id": 1, "field2": 1}).All(&docs)
if err != nil {
// Handle err
log.Printf("Query error: "%v", err)
return
}
// Process results