在Go中使用MongoDB指定查询

huangapple go评论71阅读模式
英文:

Specifying a query in MongoDB using Go

问题

混淆于如何将Javascript JSON命令翻译回Go能理解的内容。

好的,这是在mongo shell中的查询:

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

结果:

{ "firstName" : "Susann", "surname" : "Ulisch", "acct_balance" : 238897.45}
{ "firstName" : "Parker", "surname" : "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})

有没有一种简单的方法将来自mongo shell的JSON查询翻译回可以在Go中使用的内容?我对如何将$gte、$lte关键字转换为go格式中的内容有些困惑。

英文:

Confused about how to translate the Javascript JSON commands back into something go will understand.

Ok so here's the query in the mongo shell::

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

Results ::

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

Now I wanted to replicate that query in 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})

Is there a way to easily translate JSON queries from the mongo shell back to something that you can use in Go? There is some confusion in my mind as to how you use the $gte, $lte key words back into something for go format.

答案1

得分: 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 {
     // 处理错误
 }

JavaScript的find方法有两个参数,查询(query)和投影(projection)。在mgo中,查询通过单个参数指定给Find,投影通过单个参数指定给Select

问题中的代码将查询和投影合并为Find的参数。这样是行不通的。

英文:

The Javascript statement

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

translated to Go / mgo is:

 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
 }

The Javascript find method has two arguments, the query and the projection. In the mgo, the query is specified by the single argument to Find and the projection is specified by the single argument to Select.

The code in the question merges the query and projection into the argument for Find. This does not work.

huangapple
  • 本文由 发表于 2015年1月20日 04:01:14
  • 转载请务必保留本文链接:https://go.coder-hub.com/28032603.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定