MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Czy MongoDB i jego sterowniki mogą zachować kolejność elementów dokumentu?

Od wersji 2.6 MongoDB zachowuje kolejność pól tam, gdzie to możliwe. Jednak _id pole zawsze jest na pierwszym miejscu, a zmiana nazw pól może prowadzić do zmiany kolejności. Jednak generalnie starałbym się nie polegać na takich szczegółach. Jak wspomniano w pierwotnym pytaniu, istnieją również dodatkowe warstwy do rozważenia, z których każda musi dawać jakąś gwarancję stabilności porządku...

Oryginalna odpowiedź:

Nie, MongoDB nie gwarantuje kolejności pól :

W szczególności aktualizacje w miejscu, które zmieniają rozmiar dokumentu, zwykle zmieniają kolejność pól. Na przykład, jeśli $set pole, którego stara wartość była typu number, a nowa wartość to NumberLong , pola są zwykle zmieniane.

Jednak tablice zachowują kolejność poprawnie:

[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]

Nie rozumiem, dlaczego to w ogóle jest „brzydkie” i „rozdęte”. Przechowywanie listy złożonych obiektów nie może być prostsze. Jednak nadużywanie obiektów jako list jest zdecydowanie brzydkie:obiekty mają semantykę tablic asocjacyjnych (tj. może istnieć tylko jedno pole o podanej nazwie), podczas gdy listy/tablice nie:

// not ok:
db.foo2.insert({"foo" : "bar", "foo" : "lala" });
db.foo2.find();
{ "_id" : ObjectId("4ef09cd9b37bc3cdb0e7fb26"), "foo" : "lala" }

// a list can do that
db.foo2.insert({ 'array' : [ {'foo' : 'bar'}, { 'foo' : 'lala' } ]});
db.foo2.find();
{ "_id" : ObjectId("4ef09e01b37bc3cdb0e7fb27"), "array" : 
      [ { "foo" : "bar" }, { "foo" : "lala" } ] }

Pamiętaj, że MongoDB to obiektowa baza danych, a nie magazyn kluczy/wartości.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoexport -q Zapytanie o datę ISO

  2. Ostrzeżenia dotyczące uruchamiania Mongodb po aktualizacji

  3. Błąd ECONNREFUSED podczas łączenia się z mongodb z node.js

  4. Nieprawidłowa instrukcja przerwania (Node.js)

  5. mongoimport w docker-compose wyświetla błąd „Nie można uruchomić usługi”