2013-06-12 16 views
5

Czy istnieje sposób na aktualizację tablicy dokumentów, aby przenieść element z jednego indeksu do drugiego? np.Jak przenieść element w tablicy MongoDB?

{ 
    name: "myDoc", 
    items: ["it1", "it2", "it3"] 
} 

W rezultacie dla JQuery-UI Sortable event it2 i it3 zamieniły się miejscami. W rezultacie chcę zaktualizować ich pozycję w myDoc, która jest przechowywana w MongoDB.

+2

Nie, nie jest to sposób, aby to zrobić w jednym kroku. http: //docs.mongodb.operatory org/manual/reference/operator/#. W rzeczywistości nie ma nawet sposobu na wstawienie elementu do określonego indeksu. Jest to nierozwiązany/otwarty problem: https://jira.mongodb.org/browse/SERVER-2363. Musisz przepisać całą listę tablic. – WiredPrairie

+1

Co według Ciebie będzie najlepszą praktyką? –

+0

AKTUALIZACJA: od wersji 2.6. Wstawiasz do określonego indeksu za pomocą $ position - https://docs.mongodb.org/manual/reference/operator/update/position/ –

Odpowiedz

1

Na razie nie ma sposobu, aby zrobić to bezpośrednio w mongo z dowolnym sterownikiem.

Musisz to zrobić w swojej aplikacji i ustawić tablicę z mongo.

ex:

var new_array = ["it2","it1","it3"];//Do your sort/place in js 

$mongo_connexion->update({"name": "myDoc"}, {$set: {"items" : new_array}}); 
1

Oto kolejny sposób, aby przenieść element do nowej pozycji, która będzie zamieniać położenie It2 i it3 ...

  1. Usuń element z tablicy za pomocą $ pull [ Docs Here ].

    update({"name": "myDoc"}, {$pull: {"items" : "it3"}}); 
    
  2. Włóż element w nowe położenie, używając przycisku $ push. [ Docs Here ].

    update({"name": "myDoc"}, { 
        $push: { 
         "items" : { $each : [ "it3" ], $position : 1 } 
        } 
    }); 
    

Kiedy używać

odpowiedź Pouzor do używania $ zestaw może być prostsze i skuteczniejsze dla wielu zastosowań.

Jeśli jednak wielu użytkowników jednocześnie dodaje, usuwa i porządkuje elementy tablicy, ta metoda oznacza, że ​​nie zastąpisz nawzajem swoich zmian.

W niektórych przypadkach może być bardziej wydajny (np. Duże elementy tablicy), ponieważ zapisywanych jest mniej danych.

GOTCHA: Lista list

Jeśli lista jesteś reorganizację jest tablicą tablic trzeba użyć $ wszystkim operator z $ ciągnąć [ Docs Here ]

Weźmy ten przykład:

{ 
    name: "myDoc", 
    items: [ 
     [ "User", "dofij20r91dj93" ], 
     [ "User", "239vjvidjfsldf" ], 
     [ "User", "2309jvdsjdkk23" ] 
    ] 
} 

Oto kod, aby usunąć pierwszą listę z listy:

update({"name": "myDoc"}, { 
    $pull: { 
     "items" : { 
      $all : [ "User", "dofij20r91dj93" ] // the sub-list to $pull 
     } 
    } 
}); 

Lista obiektów

To jest łatwe. Załóżmy, że masz listę następujących obiektów:

{ 
    name: "myDoc", 
    items: [ 
     { type: "User", id: "dofij20r91dj93", name: "Dave" }, 
     { type: "Group", id: "239vjvidjfsldf", name: "Accountants" }, 
     { type: "User", id: "2309jvdsjdkk23", name: "Toni" } 
    ] 
} 

Można $ ciągnąć tak:

update({"name": "myDoc"}, { 
    $pull: { 
     "items" : { type: "User", id: "dofij20r91dj93" } 
    } 
}); 
Powiązane problemy