0

我有一个集合,其中_ids 是时间和字符串的组合(是的,我知道这很糟糕,但是......当我到达时就是这样)。该集合中的一条记录如下所示:

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

基本上,我试图找出一个查询,它会给我记录 where _id.my_stringisFoo_id.my_timeis between time1andtime2

我可以$and用来构建查询dict复合的不同部分的查询_id吗?

这将返回 0 条记录:

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

这也是这样:

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

以防你没有注意到,当谈到 MongoDB 时,我是一个真正的新手。

先感谢您!

4

1 回答 1

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(...)
        }
    }
    )
于 2014-12-19T20:38:43.907 回答