使用PyMongo查询MongoDB中时间范围的复合_id

时间:2014-12-19 19:07:27

标签: python mongodb pymongo mongodb-query compound-index

我有一个集合,其中_id是时间和字符串的复合(是的,我知道它很糟糕但是... 就像我到达时那样) 。该集合中的一条记录如下:

{
  "_id": {
    "my_string": "Foo",
    "my_time": new Date("2014-12-19T12:38:00-0500")
  },
  "field1": 60,
  "field2": 17,
}

基本上,我正在尝试找出一个查询,该查询会向我提供_id.my_stringFoo_id.my_time介于time1和{{1}之间的记录}

我是否可以使用time2构建查询$and来查询复合dict的不同部分?

返回0条记录:

_id

这样做:

my_collection.find(
    {
        '_id': {
            'my_string': 'Foo',
            '$and': [
                {'my_time': {'$gte': datetime.datetime(...)}},
                {'my_time': {'$lte': datetime.datetime(...)}},
            ]
        }
    }
)

万一你没有注意到,我对MongoDB来说真是个新手。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

my_collection.find(
    {
        '$and' :
            [
                {'_id.my_string': 'Foo'},
                {'_id.my_time' : {'$gte': datetime.datetime(...), '$lte': datetime.datetime(...)}},
            ]
        }
    }
    )

您无需使用$and进行此查询。

以下查询可以写为:

my_collection.find(
    {
        '_id.my_string': 'Foo',
        '_id.my_time' : 
        {
            '$gte': datetime.datetime(...), 
            '$lte': datetime.datetime(...)
        }
    }
    )