解析一个没有固定键集的字符串,用于MongoDB的查找查询。

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

Parse a string without fixed set of keys for MongoDB find query

问题

我有一个API,用户将传递他们想要传递给MongoDB的查询参数。API将从请求参数中获取字符串,并直接传递给Mongo的查询。查询字符串不会有任何固定的键集。它可以具有以下结构之一 -

{"name": "foo"}
{"name": "foo", "source": "bar"}
{"source": "oof", "place": "rab"}
...

我该如何解析这个字符串,以便我可以像这样直接使用 -

collection.Find(MyQuery).All(&m)
英文:

I have an API where the user will pass the query parameters they want to pass it to MongoDB. The API will take the string from the request parameter and pass it directly to Mongo find query. The query string won't have any fixed set of keys. It can have the one of the following structures -

{"name": "foo"}
{"name": "foo", "source": "bar"}
{"source": "oof", "place": "rab"}
...

How do I parse this string, so that I can directly use like this -

collection.Find(MyQuery).All(&m)

答案1

得分: 2

你只需对 JSON 使用 json.Unmarshal 进行解析,并将其转换为 bson.M 类型,然后像往常一样调用 Find 方法,示例如下:示例链接

q := bson.M{}
if err := json.Unmarshal([]byte(json_str), &q); err != nil {
    panic(err)
}
collection.Find(q).All(&m)

但由于这是来自 API 的数据,你在将 q 传递给 Find 方法之前应该进行一些清理工作。

英文:

You simply use json.Unmarshal on the json and convert it to bson.M then call Find like usual, example:

q := bson.M{}
if err := json.Unmarshal([]byte(json_str), &q); err != nil {
	panic(err)
}
collection.Find(q).All(&m)

But since this is coming from an API, you should do some clean up before you pass q to Find.

huangapple
  • 本文由 发表于 2014年7月25日 21:06:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/24956463.html
匿名

发表评论

匿名网友

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

确定