MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Променете реда, в който свойствата се показват в MongoDB

Горният въпрос и отговор са доста стари. Както и да е, ако някой посети това, смятам, че трябва да добавя:

Този отговор е напълно погрешен. Всъщност в Mongo Documents СА подредени двойки ключ-стойност. Въпреки това, когато се използва 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 само maches subdocuemnts с правилния ред, но python dicts просто вмъкват поддокумента в произволен ред.

вижте следния отговор как да използвате подреден dict, за да преодолеете това:https://stackoverflow.com/a/30787769/4273834



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB – Донесете свои собствени SSL сертификати

  2. Високопроизводителни MongoDB клъстери на Amazon EC2

  3. Как да И и НЕ в MongoDB $text търсене

  4. Какъв е пътят към базата данни по подразбиране за MongoDB?

  5. Агрегацията на MongoDB с $lookup включва (или проектира) само някои полета за връщане от заявка