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