Недопустимый синтаксис Pymongo около $ gte - PullRequest
0 голосов
/ 03 июля 2018

Я использую Pymongo. Я успешно подключился к своему MongoDB. Название коллекции test_collection. В документе есть ключ с именем request_time. Я пытаюсь получить документы в определенном диапазоне request_time.

В оболочке mongodb эта команда работает,

db.getCollection('test_collection').find({ request_time: { $gte: new Date('2018-06-22'), $lt: new Date('2018-06-26') }});

Но когда я использую пимонго. Он не принимает $ и выдает синтаксическую ошибку.

collection = db['test_collection']

cursor = collection.find({request_time: { $gte: new Date('2018-06-22'), $lt: new Date('2018-06-26') }})

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Используйте '$ gt' и '$ lt' в коде.

cursor = collection.find({request_time: { '$gte': new Date('2018-06-22'), '$lt': new Date('2018-06-26') }})
0 голосов
/ 03 июля 2018

Вы пишете команды в Javascript в оболочке mongo, не копируйте и не вставляйте их в python. Python не является Javascript.

Python не имеет ни new, ни встроенного Date типа.

find метод класса pymongo.collection.Collection ожидает словарь со строковыми ключами, ставит ключи в кавычки.

Используйте datetime.datetime, если соответствующие поля в документах из коллекции монго равны ISODate с.

import datetime 
cursor = collection.find({"request_time": { 
                          "$gte": datetime.datetime(2018, 6, 22), 
                          "$lt": datetime.datetime(2018, 6, 26) }
                         })
0 голосов
/ 03 июля 2018

Попробуйте поставить браслет в каждом состоянии

({{$ gte: новая дата ('2018-06-22')}, {$ lt: новая дата ('2018-06-26')}})

...