2015-02-19 5 views
1

Я сортирую коллекцию в столбце даты, чтобы найти минимальную дату в этой коллекции. Однако он возвращает мне запись, в которой отсутствует ключ даты. Ниже приведен фрагмент. Это ошибка?pymongo сортировка возвращающая запись, у которой нет ключа сортировки

date_records = usercollection.find({'customer_id':'abc'}).sort('join_date',1).limit(1) 
for record in date_records: 
    print record # prints a record that doesn't have the join_date key 
    print record['join_date'] 

Выход:

{ "_id" : ObjectId("94dbe4c6ea890e28113d7664"), "region" : "Virginia", "country_code" : "US", "customer_id" : "abc"} 

KeyError: u'join_date' 
+0

Это не ошибка. Быстрый вопрос: хотите ли вы отсортировать только записи, содержащие поле 'join_date'? – alecxe

+0

Да, я хочу получить самую раннюю дату из всех записей, у которых есть поле join_date. – ubh

ответ

2

Это не ошибка и как sort in MongoDB должен работать:

Сравнение трактует несуществующий поле было бы пустой BSON Объект. Таким образом, сортировка по полю a в документах {} и {a: null } будет рассматривать документы как эквивалентные в порядке сортировки.

И, так как вы отметили:

Я хочу, чтобы получить самую раннюю дату из всех записей, которые имеют join_date поле

проверка join_date существовать, используя $exists:

usercollection.find({ 
    'customer_id': 'abc', 
    'join_date': {'$exists': True} 
}).sort('join_date', 1) 
Смежные вопросы