使用Go在MongoDB中指定查询

时间:2015-01-19 20:01:15

标签: mongodb go mgo

对如何将Javascript JSON命令转换回某些内容感到困惑。

好的,这就是mongo shell ::

中的查询
db.customers.find({acct_balance:{$gt:100000}}, {firstName: 1, surname:1, acct_balance:1, _id:0})

结果::

{" firstName" :" Susann","姓" :" Ulisch"," acct_balance" :238897.45} {" firstName" :" Parker","姓" :" Peet"," acct_balance" :443314.13}

现在我想在Go中复制该查询。

c := session.DB("mydb").C("customers")
query := []bson.M{}
query["firstName"] = append(bson.M{"firstName": "1"})
query["surname"] = append(bson.M{"surname": "1"})
query["$gte"] = []bson.M{}
query["$gte"] = append(query["$gte"].([]bson.M), bson.M{"acct_bal": 100000})

有没有办法轻松将jong查询从mongo shell转换回你可以在Go中使用的东西?关于你如何使用$ gte,$ lte关键词回到go格式的东西,我有一些困惑。

1 个答案:

答案 0 :(得分:1)

Javascript声明

db.customers.find({acct_balance:{$gt:100000}}, {firstName: 1, surname:1, acct_balance:1, _id:0})

翻译为Go / mgo是:

 c := db.C("customers")
 var results []Customer
 err := c.Find(bson.M{"acct_balance": bson.M{"$gt":100000}}).
       Select(bson.M{"firstName": 1, "surname":1, "acct_balance": 1}).
       All(&results)
 if err != nil {
     // handle error
 }

Javascript find方法有两个参数,queryprojection。在mgo中,查询由Find的单个参数指定,投影由Select的单个参数指定。

问题中的代码将查询和投影合并到Find的参数中。这不起作用。