2016-04-26 18 views
4

Ich wollte wissen, ob es möglich ist, die Sync-Gateway-Buckets mit N1QL abzufragen? Verhält es sich wie ein normaler Couchbase-Bucket oder kann aufgrund der Metadaten, die das Sync-Gateway hinzufügt, nur über Rest-APIs abgefragt werden?Abfragen von Sync-Gateway-Buckets mit N1QL

Derzeit habe ich einen Webhooks-Handler, der eine Kopie der Dokumente unter Sync-Gateway-Buckets hält. Ich muss einige Aggressionen machen, die zu den Kunden zurückgeschoben werden müssen. Also, kann ich all das schwere Heben direkt über n1ql auf Sync-Gateway oder mit Webhooks, die die Aggregationen und schiebt einfach die aktualisierte Dokumentation auf Sync-Gateway ist die richtige Option?

PS: Die Webhooks + Rest APIS-Option funktioniert derzeit perfekt für mich. Wollte nur verstehen, ob dieser Hop notwendig ist oder nicht?

Antwort

4

Ja, es ist möglich, das Sync-Gateway mit N1QL abzufragen - Sie können es nur nicht ändern (aktualisieren/löschen/einfügen), da es die Metadaten der Revisionen brechen würde.

Sie müssen die Dokumente mit IDs ignorieren, die mit _sync: beginnen, und die 10-Eigenschaft jedes Dokuments, das interne Metadaten enthält. Die restlichen Attribute sind Ihr übliches Dokument.

Beispiel:

select db.* from db where meta().id not like '_sync:%' 

Ergebnis:

[ 
    { 
    "_sync": { 
     "history": { 
     "channels": [ 
      null, 
      null 
     ], 
     "parents": [ 
      -1, 
      0 
     ], 
     "revs": [ 
      "1-b7a15ec4afbb8c4d95e2e897d0ec0a2e", 
      "2-919b17d3f418100df7298a12ef2a84bb" 
     ] 
     }, 
     "recent_sequences": [ 
     6, 
     7 
     ], 
     "rev": "2-919b17d3f418100df7298a12ef2a84bb", 
     "sequence": 7, 
     "time_saved": "2016-05-04T18:54:26.952202911Z" 
    }, 
    "name": "Document with two revisions" 
    } 
] 

Ignorieren der _sync Attribut:

select name from db where meta().id not like '_sync:%' 

Ergebnis:

[ 
    { 
    "name": "Document with two revisions" 
    } 
] 

In Couchbase 4.5 (BETA ab heute) können wir die object_remove Funktion verwenden - obwohl ich es zugunsten der vorherigen expliziten Syntax vermeiden würde.

select object_remove(db, '_sync') from db where meta().id not like '_sync:%' 

Ergebnis:

[ 
    { 
    "$1": { 
     "name": "Document with two revisions" 
    } 
    } 
] 

Ich weiß nicht, was zur Zeit Ihr Setup ist, aber AFAIK, es ist völlig in Ordnung, den Eimer Throught N1QL zu halten abfragt, während die REST-API für die Datenänderungen verwendet.