我想知道是否可以使用N1QL查询同步网关存储区?它是否像普通的couchbase桶一样,或者由于同步网关添加的元数据,是否可以仅通过Rest API查询它?
目前我有一个webhooks处理程序,它保存驻留在同步网关存储桶下的文档的副本。我需要做一些需要被推回给客户的攻击。那么,我可以直接在同步网关上执行所有这些繁重工作,或者使用执行聚合的webhooks并简单地将更新的文档推送到同步网关是正确的选项吗?
PS:webhooks + Rest APIS选项目前对我来说非常适合。只是想了解这一跳是否必要?
答案 0 :(得分:4)
是的,可以使用N1QL查询同步网关 - 您无法对其进行更改(更新/删除/插入),因为它会破坏修订版本'元数据。
您需要忽略ID为_sync:
的文档和每个文档的_sync
属性,其中包含内部元数据。其余属性是您通常的文档。
示例:
select db.* from db where meta().id not like '_sync:%'
结果:
[
{
"_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"
}
]
忽略_sync
属性:
select name from db where meta().id not like '_sync:%'
结果:
[
{
"name": "Document with two revisions"
}
]
在Couchbase 4.5(截至今天的BETA)中,我们可以使用object_remove函数 - 尽管我避免使用以前更明确的语法。
select object_remove(db, '_sync') from db where meta().id not like '_sync:%'
结果:
[
{
"$1": {
"name": "Document with two revisions"
}
}
]
我不知道你当前的设置是什么,但AFAIK,在使用REST API进行数据更改时,通过N1QL查询存储桶是完全正常的。