是的,可以使用 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 查询存储桶是非常好的。