sql >> Databáze >  >> NoSQL >> MongoDB

Upravte pořadí, ve kterém se vlastnosti zobrazují v MongoDB

Výše uvedená otázka a odpověď jsou poměrně staré. Každopádně, pokud to někdo navštíví, mám pocit, že bych měl přidat:

Tato odpověď je zcela chybná. Ve skutečnosti jsou v Mongo Documents objednány páry klíč-hodnota. Při použití pymongo však bude používat python dicts pro dokumenty, které skutečně nejsou objednány (od cpythonu 3.6 python dicts zachovávají pořadí, nicméně toto je považováno za detail implementace). Ale to je omezení ovladače pymongo.

Uvědomte si, že toto omezení ve skutečnosti ovlivňuje použitelnost. Pokud v databázi zadáte dotaz na vnořený dokument, bude se shodovat pouze v případě, že je pořadí párů klíč–hodnota správné.

Zkuste sami následující kód:

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

Pokaždé, když je tento kód spuštěn, je do kolekce přidán „stejný“ dokument. Pokaždé, když spustíme tento úryvek kódu, vytištěná hodnota by se tedy „měla“ zvýšit o jednu. Není tomu tak proto, že najít pouze maches vnořené dokumenty se správným řazením, ale python diktuje pouze vložit subdoc v libovolném pořadí.

viz následující odpověď, jak to překonat pomocí uspořádaného diktátu:https://stackoverflow.com/a/30787769/4273834



  1. Mongoose vrátí hodnotu nedefinovaná pro existující pole

  2. Jak povolit distribuovanou/clusterovou mezipaměť při použití redis s mezipamětí jarních dat

  3. Jak na to:Přidejte Cloudera Search do svého clusteru pomocí Cloudera Manager

  4. Vyberte data, kde rozsah mezi dvěma různými poli obsahuje dané číslo