2012-12-08 17 views
7
Documents.update(
    {_id: Session.get("current_document_id")}, 
    {$push: {schema: {type: "text", size: size, name: name, label: label}}} 
); 

Powyższe zapytanie jest zbiorem Meteor i mapy „Documents.update” do „” w dokumentacji db.documents.update MongoDB (http: // docs .mongodb.org/manual/applications/update /). Za pomocą tego zapytania mogę dodać dokument schematu do głównego dokumentu. Dokumenty podrzędne są przechowywane w tablicy:zaktualizować dokument podrzędny zawarty w tablicy zawartej w dokumencie MongoDB

Document: 
    schema: 
    array: 
     {type: "text", size: 6, name: "first_name", label: "First name"}, 
     {type: "text", size: 6, name: "last_name", label: "Last name"} 

Chcę zmodyfikować nazwę i rozmiar atrybuty tych Dokumenty podrzędne z tego zapytania:

Documents.update(
    {_id: Session.get("current_document_id"), 'schema' : "first_name"}, 
    {$push: {schema: {type: "text", size: 7, name: name, label: "First Name2"}}} 
); 

ale operacji dołączania nowy obiekt bezpośrednio pod schematu i usuwa array:

Document: 
    schema: 
     {type: "text", size: 7, name: "first_name", label: "First Name2"} 

Jak zmodyfikować zapytanie, aby zmienić atrybuty unikające tego problemu? Po zapytaniu Chciałbym mieć ten dokument:

Document: 
    schema: 
    array: 
     {type: "text", size: 7, name: "first_name", label: "First name2"}, 
     {type: "text", size: 6, name: "last_name", label: "Last name"} 
+0

punktów schematu do tablicy obiektów – rtacconi

Odpowiedz

19

można zaktualizować istniejący element tablicy używając $set operację, która używa operatora pozycyjną $ zidentyfikować element tablicy dopasowany w selektorze tak:

Documents.update(
    {_id: Session.get("current_document_id"), 'schema.name': "first_name"}, 
    {$set: {'schema.$': {type: "text", size: 7, name: name, label: "First Name2"}}} 
); 

Spowoduje to zamianę dopasowanego elementu schema na element zawarty w obiekcie $set.

Jeśli chcesz zaktualizować pojedyncze pola docelowego elementu schema, możesz użyć notacji kropkowej. Na przykład, aby aktualizować tylko pola size i name:

Documents.update(
    {_id: Session.get("current_document_id"), 'schema.name': "first_name"}, 
    {$set: {'schema.$.size': 7, 'schema.$.name': name}} 
); 
+0

Thanks to działa, ale otrzymuję ten błąd: https://gist.github.com/4243896. Później przyjrzę się, aby znaleźć przyczynę. Błąd nie jest zbyt objaśniający. – rtacconi

+1

@rtacconi Wygląda na to, że operator pozycyjny '$' nie jest obsługiwany w minimongo meteorytu: https://github.com/meteor/meteor/issues/153 – JohnnyHK

+0

Tak, masz rację :-) – rtacconi

Powiązane problemy