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}}}
>>>