英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论