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

Jak $ustawić pozycje podtablicy w MongoDB

Jeśli znasz indeks w tablicy, możesz uzyskać bezpośredni dostęp do elementu tablicy za pomocą notacji kropkowej.

update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)

Upewnij się, że ujmujesz ścieżkę zapisaną kropką w cudzysłowie jako ciąg.

Edytuj:

Aby podać więcej szczegółów na temat tego, jak to może działać dynamicznie, podam przykład w PHP:

$action = array("columns.$colNum.panels.$panelNum" => $newValue);

Tak, istnieje operator pozycyjny , ale nie wydaje się wystarczająco zaawansowany aby zmienić tablice w tablicach, może się to zmienić w MongoDB 1.7.0

Istnieje alternatywa, którą możesz zrobić zamiast próbować umieścić te informacje w zagnieżdżonym dokumencie. Spróbuj to spłaszczyć. Możesz utworzyć kolekcję zawierającą obiekty paneli i kolumn:

obiekt kolumny:

{
_id: // MongoId
type: 'column',
user: 'username',
order: 1,
width: 30,
}

obiekt panelu:

{
_id: //MongoId
type: 'panel',
user: 'username',
parentColumn: //the columns _id string
top: 125,
left: 100
}

Następnie możesz znaleźć wszystkie kolumny należące do użytkownika, wykonując:

find({ type: 'column', user:'username'});

Możesz znaleźć wszystkie panele dla określonej kolumny, wykonując:

find({type: 'panel', columnOwner:'ownerID'});

Ponieważ każda kolumna i panel będą miały unikalny identyfikator nadany przez MongoDB, możesz łatwo wyszukiwać i niepodzielnie ustawiać opcje.

update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Resetowanie połączenia przez Peer pymongo

  2. Jak naprawić mój mongodb?

  3. Częściowa aktualizacja poddokumentu za pomocą nodejs/mongoose

  4. Której bazy danych NoSQL powinienem używać do logowania?

  5. Znajdź całkowity czas spędzony przez użytkownika w mongoDB