sql >> Database >  >> NoSQL >> MongoDB

Wijzig de volgorde waarin eigenschappen worden weergegeven in MongoDB

Bovenstaande vraag en antwoord zijn vrij oud. Hoe dan ook, als iemand dit bezoekt, heb ik het gevoel dat ik moet toevoegen:

Dit antwoord is helemaal fout. Eigenlijk zijn in Mongo Documents ARE geordende sleutel-waardeparen. Bij gebruik van pymongo zal het echter python-dictaten gebruiken voor documenten die inderdaad niet zijn geordend (vanaf cpython 3.6 behouden python-dictaten de volgorde, maar dit wordt beschouwd als een implementatiedetail). Maar dit is een beperking van de pymongo-driver.

Houd er rekening mee dat deze beperking daadwerkelijk van invloed is op de bruikbaarheid. Als u de db opvraagt ​​voor een subdocument, komt het alleen overeen als de volgorde van de sleutel-waardeparen correct is.

Probeer gewoon zelf de volgende code:

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())

Elke keer dat deze code wordt uitgevoerd, wordt 'hetzelfde' document aan de verzameling toegevoegd. Dus elke keer dat we dit codefragment uitvoeren, 'moet' de afgedrukte waarde met één toenemen. Het is niet zo omdat het vinden van subdocumenten alleen met de juiste volgorde kan worden uitgevoerd, maar python-dictaten kunnen het subdocument gewoon in willekeurige volgorde invoegen.

zie het volgende antwoord hoe je een geordend dictaat kunt gebruiken om dit te verhelpen:https://stackoverflow.com/a/30787769/4273834



  1. Zoeken in volledige tekst met gewicht in mangoest

  2. Aanhoudend Python-object in het geheugen voor nginx/uwsgi-server

  3. Redis cluster failover:slave wordt geen master

  4. Ondersteuning voor meerdere gebruikerstypen door Passport-local mongoose node.js