Разобрать строку без фиксированного набора ключей для запроса поиска MongoDB

У меня есть API, в котором пользователь будет передавать параметры запроса, которые они хотят передать в MongoDB. API возьмет строку из параметра запроса и передаст ее непосредственно в запрос поиска Mongo. Строка запроса не будет иметь фиксированного набора ключей. Он может иметь одну из следующих структур -

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

Как мне разобрать эту строку, чтобы я мог напрямую использовать ее так:

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

person jyotiska    schedule 25.07.2014    source источник


Ответы (1)


Вы просто используете json.Unmarshal в json и конвертируете его в 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.

person OneOfOne    schedule 25.07.2014