Как заказать поля документов, возвращаемых поиском в MongoDB? [Дубликат]

Проверьте все пакеты, которые вы установили для php, используя:

yum list installed | grep remi

Установите все соответствующие пакеты php, особенно php-devel на вашем компьютере.

4
задан alecxe 14 January 2015 в 04:22
поделиться

2 ответа

Оригинальный ответ (2013):

Документы MongoDB являются объектами BSON, неупорядоченными словарями пар ключ-значение. Таким образом, вы не можете полагаться или устанавливать определенный порядок полей. Единственное, что вы можете использовать, - это какие поля отображать, а какие нет, см. Docs в аргументе find projection .

Также см. Связанные вопросы о SO:

Надеюсь, что это поможет.

4
ответ дан alecxe 19 August 2018 в 02:17
поделиться

Вышеупомянутый вопрос и ответ довольно старые. Во всяком случае, если кто-то посещает это, я чувствую, что должен добавить:

Этот ответ совершенно неверен. Фактически в Mongo Documents ARE заказываются пары ключ-значение. Однако при использовании pymongo он будет использовать python dicts для документов, которые действительно не упорядочены (так как cpython 3.6 python dicts сохраняет порядок, однако это считается деталью реализации). Но это ограничение драйвера pymongo.

Имейте в виду, что это ограничение фактически влияет на удобство использования. Если вы запрашиваете db для поддокумента, он будет соответствовать только, если порядок пар ключей-значений правильный.

Просто попробуйте следующий код самостоятельно:

from pymongo import MongoClient
db = MongoClient().testdb
col = db.testcol
subdoc = {
   'field1': 1,
   'field2': 2,
   'filed3': 3
}
document = {
   'subdoc': subdoc
}
col.insert_one(document)
print(col.find({'subdoc': subdoc}).count())

Каждый раз этот код запускается, тот же самый документ добавляется в коллекцию. Таким образом, каждый раз, когда мы запускаем этот фрагмент кода, печатное значение «должно» увеличиваться на единицу. Это происходит не потому, что find только перехватывает subdocuemnts с правильным порядком, но python dicts просто вставляет subdoc в произвольный порядок.

см. Следующий ответ, как использовать упорядоченный dict для преодоления этого: https: // stackoverflow.com/a/30787769/4273834

4
ответ дан squanto773 19 August 2018 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: