pymongo 中的多个查询
Multiple query in pymongo
我有 mongoDB 个具有以下结构的项目:
{
"some_field": {
"date": 123,
"text": "secondary text"
},
"text": "primary text"
}
我想在 pymongo 中编写查询,检查顶级文本字段并在第二级 "date" 字段应用条件查询。我得到以下形式的过滤器:
filter = {
"text": "some target text",
"date": {
"start": some_int_val1,
"end": some_int_val2
}
}
我可以毫无问题地创建对 "text" 的查询:
query = dict()
query["text"] = filter["text"]
但我对如何在 "some_field.date" 上构建 $and 查询感到困惑。我试图将它们简单地组合在一个查询中:
query["somefield.date"] = [{"$gte": filter["common_date"]["start"]}, {"$lte": filter["common_date"]["end"]}]
但是没有用。另外,我尝试了我认为可行的方法,但它引发了一个错误:
query["somefield.date"] = { $and: [{"$gte": filter["date"]["start"]}, {: filter["date"]["end"]}]}
说 "statement expected, found Py:AND_KEYWORD"。我该如何克服这个问题?
这应该有效
query["somefield.date"] = {"$gte": filter["date"]["start"],"$lte": filter["date"]["end"]}
您的最终查询应如下所示:
{
'somefield.date': {'$gte': some_int_val1, '$lte': some_int_val2},
'text': 'some target text'}
}
在 JavaScript 中,您可以使用 bracket-notation 创建查询对象,如下所示:
var filter = {
"text": "some target text",
"date": {
"start": 100,
"end": 150
}
};
var query = { "some_field": { "date": {} } };
query["text"] = filter["text"];
query["some_field"]["date"]["$gte"] = filter["date"]["start"];
query["some_field"]["date"]["$lte"] = filter["date"]["end"];
console.log(JSON.stringify(query)); // {"some_field":{"date":{"$gte":100,"$lte":150}},"text":"some target text"}
使用 python 中的相同概念创建您的查询字典,如下所示:
>>> filter = {
... "text": "some target text",
... "date": {
... "start": 100,
... "end": 150
... }
... }
>>>
>>> print(filter)
{'date': {'start': 100, 'end': 150}, 'text': 'some target text'}
>>> query = { "some_field": { "date": {} } }
>>> query["text"] = filter["text"]
>>> query["some_field"]["date"]["$gte"] = filter["date"]["start"]
>>> query["some_field"]["date"]["$lte"] = filter["date"]["end"]
>>> print(query)
{'text': 'some target text', 'some_field': {'date': {'$lte': 150, '$gte': 100}}}
>>>
我有 mongoDB 个具有以下结构的项目:
{
"some_field": {
"date": 123,
"text": "secondary text"
},
"text": "primary text"
}
我想在 pymongo 中编写查询,检查顶级文本字段并在第二级 "date" 字段应用条件查询。我得到以下形式的过滤器:
filter = {
"text": "some target text",
"date": {
"start": some_int_val1,
"end": some_int_val2
}
}
我可以毫无问题地创建对 "text" 的查询:
query = dict()
query["text"] = filter["text"]
但我对如何在 "some_field.date" 上构建 $and 查询感到困惑。我试图将它们简单地组合在一个查询中:
query["somefield.date"] = [{"$gte": filter["common_date"]["start"]}, {"$lte": filter["common_date"]["end"]}]
但是没有用。另外,我尝试了我认为可行的方法,但它引发了一个错误:
query["somefield.date"] = { $and: [{"$gte": filter["date"]["start"]}, {: filter["date"]["end"]}]}
说 "statement expected, found Py:AND_KEYWORD"。我该如何克服这个问题?
这应该有效
query["somefield.date"] = {"$gte": filter["date"]["start"],"$lte": filter["date"]["end"]}
您的最终查询应如下所示:
{
'somefield.date': {'$gte': some_int_val1, '$lte': some_int_val2},
'text': 'some target text'}
}
在 JavaScript 中,您可以使用 bracket-notation 创建查询对象,如下所示:
var filter = {
"text": "some target text",
"date": {
"start": 100,
"end": 150
}
};
var query = { "some_field": { "date": {} } };
query["text"] = filter["text"];
query["some_field"]["date"]["$gte"] = filter["date"]["start"];
query["some_field"]["date"]["$lte"] = filter["date"]["end"];
console.log(JSON.stringify(query)); // {"some_field":{"date":{"$gte":100,"$lte":150}},"text":"some target text"}
使用 python 中的相同概念创建您的查询字典,如下所示:
>>> filter = {
... "text": "some target text",
... "date": {
... "start": 100,
... "end": 150
... }
... }
>>>
>>> print(filter)
{'date': {'start': 100, 'end': 150}, 'text': 'some target text'}
>>> query = { "some_field": { "date": {} } }
>>> query["text"] = filter["text"]
>>> query["some_field"]["date"]["$gte"] = filter["date"]["start"]
>>> query["some_field"]["date"]["$lte"] = filter["date"]["end"]
>>> print(query)
{'text': 'some target text', 'some_field': {'date': {'$lte': 150, '$gte': 100}}}
>>>