2017-09-06 2 views
1

erwartete ich teilweise Aktualisierung eines Dokuments Couchbase tue wie folgt:Couchbase Teil Update funktioniert nicht wie

... 
MutateInBuilder builder = bucket.mutateIn(id); 
for (Map.Entry<String, Object> entry : map.entrySet()) 
{ 
    builder = builder.upsert(entry.getKey(), entry.getValue()); 
} 
builder.execute(); 
... 

Wenn alle Werte in allen Upsert Anrufe vom gleichen Typ sind, die Dinge gut funktionieren.

Wenn jedoch einige Werte sind Strings, und andere sagen, sind Boolean, wir werden immer die Ausnahme:

com.couchbase.client.core.CouchbaseException: SUBDOC_INVALID_COMBO bei com.couchbase.client.java .subdoc.SubdocHelper.commonSubdocErrors (SubdocHelper.java:100) bei com.couchbase.client.java .sub.doc.AsyncMutateInBuilder $ 2.call (AsyncMutateInBuilder.java:1094) bei com.couchbase.client.java .suboc.AsyncMutateInBuilder $ 2 .call (AsyncMutateInBuilder.java:1052)

In den Testfällen für Upsert konnte kein Fall gefunden werden, in dem mehrere Attribute aktualisiert werden.

Wie können wir ein Dokument mit Attributen verschiedener Typen in Couchbase hochladen?

EDIT # 1:

Nun Dinge bekam weirder ... Ich erhalte die gleiche Ausnahme, wenn ich mehr als 16 Attributen in einer Iteration aktualisieren.

Antwort

0

Momentan haben wir Attribute nach Klassen gruppiert und so viele Dokument-Upserts ausgeführt, wie es Typen gibt.

for(Map.Entry<Class, Map<String, Object>> entry : attributesByClass.entrySet()) 
{ 
    MutateInBuilder builder = bucket.mutateIn(id); 
    for (Map.Entry<String, Object> tmp : entry.getValue().entrySet()) 
    { 
     builder = builder.upsert(tmp.getKey(), tmp.getValue()); 
    } 
    builder.execute();    
} 

Es ist ein ineffizienter Hack. Eine bessere Lösung ist willkommen.

1

Vom Couchbase Sub-Document API documentation (siehe Abschnitt Limit):

Sie nicht mehr als 16 Operationen innerhalb eines Lookup-in oder mutieren-Kommando kombinieren.

Ich vermute, dass Sie diese Einschränkung in beiden Fällen, Mischwerttyp und Einzelwerttyp, begegnet sind.

überprüft mit Couchbase Java SDK Version 2.3.7.