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

Aktualizacja głębokiego rekordu w MongoDb

Problem polega na tym, że nie możesz użyć $ operator, aby pokazać dopasowanie na zagnieżdżonych poziomach w tablicy. A co najważniejsze, możesz określić tylko raz.

Jak stwierdzono w dokumentacji , czy $ będzie tylko dopasuj pierwszy znaleziony element. To nie tylko oznacza, że ​​jeśli masz wiele dopasowań do zapytania, zostanie wybrane tylko pierwsze, oznacza to również, że tylko pierwszy dopasowany zostanie użyta pozycja tablicy. Oznacza to, że coś takiego również nie zadziała:

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Ponieważ to błędnie pasuje do index 1 wartość i zaktualizuj element, którego się nie spodziewałeś.

Jeśli mógłbyś ewentualnie zaktualizować całość tablicy, wtedy zadziałałoby następujące:

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Tak jak powiedziałem, ponieważ index pasuje do pierwszego tablica.

Ale biorąc pod uwagę strukturę, którą masz, wydaje się, że najlepszą opcją jest zmiana tablicy najwyższego poziomu na dokument podrzędny. Chyba że w rzeczywistości ma to powód, by być tablicą, a nie dwoma mieszane typy dokumentów, na które wygląda teraz.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zaktualizuj wszystkie elementy w tablicy w mongodb

  2. make nie powiodła się próba zainstalowania sterownika mongo php na Centos 6

  3. Jak zaktualizować _id jednego dokumentu MongoDB?

  4. Zaktualizuj wiele elementów o różnej wartości w Mongoose

  5. Jak przechowywać datę i godzinę w Meteor dla zapytań o zasięg?