2016-05-31 6 views
0

Ich bin neu bei Couchbase und ich habe diese Struktur:N1QL - Wie fügt man jedem Element des Arrays, das sich in einem anderen Array befindet, ein neues Feld hinzu?

{ 
    items: [ 
    { 
     id: "a1", 
     subitems: [ 
     { 
      id: "b1", 
      name: "joe1" 
     }, 
     { 
      id: "b2", 
      name: "joe2" 
     } 
     ] 
    } 
    ], 
    docType: "mydoc" 
} 

Ich brauche neues Feld innerhalb Subitems jedes Objekt hinzuzufügen. Ich weiß, wie dies zu tun mit 1 Level-Array =>

UPDATE default SET a.newField='blabla' FOR a IN items END where docType = 'mydoc'; 

Es sei darauf produzieren:

{ 
    items: [ 
    { 
     newField: "blabla", 
     id: "a1", 
     subitems: [ 
     { 
      id: "b1", 
      name: "joe1" 
     }, 
     { 
      id: "b2", 
      name: "joe2" 
     } 
     ] 
    } 
    ], 
    docType: "mydoc" 
} 

Aber ich brauche dieses Ergebnis:

{ 
    items: [ 
    { 
     id: "a1", 
     subitems: [ 
     { 
      newField: "blabla", 
      id: "b1", 
      name: "joe1" 
     }, 
     { 
      newField: "blabla", 
      id: "b2", 
      name: "joe2" 
     } 
     ] 
    } 
    ], 
    docType: "mydoc" 
} 

Vielen Dank für jede Hilfe.

Antwort

0

Mit der bevorstehenden Couchbase 4.5.1, sollten Sie in der Lage zu tun:

UPDATE default 
SET s.newField = 'newValue' FOR s IN ARRAY_FLATTEN(items[*].subitems, 1) END; 

UPDATE default 
SET s.newField = 'newValue' FOR s IN ARRAY_FLATTEN(ARRAY i.subitems FOR i IN items END, 1) END; 

UPDATE default 
SET i.subitems = (ARRAY OBJECT_ADD(s, 'newField', 'blabla') FOR s IN i.subitems END) FOR i IN items END; 
+0

Leider 4.1.0-5005 ich verwende. Gibt es etwas für diese Version? –

+0

Ok, ich habe Server auf Version 4.5 aktualisiert, beide Abfragen geben denselben Fehler "msg": "syntax error - at (" –

+0

Versuchen Sie die Abfragen manuell einzugeben. Möglicherweise haben Sie ein verstecktes Zeichen in Ihrer Kopie und einfügen. – geraldss

Verwandte Themen