使用N1QL查询同步网关存储桶

时间:2016-04-26 17:16:47

标签: couchbase couchbase-sync-gateway n1ql

我想知道是否可以使用N1QL查询同步网关存储区?它是否像普通的couchbase桶一样,或者由于同步网关添加的元数据,是否可以仅通过Rest API查询它?

目前我有一个webhooks处理程序,它保存驻留在同步网关存储桶下的文档的副本。我需要做一些需要被推回给客户的攻击。那么,我可以直接在同步网关上执行所有这些繁重工作,或者使用执行聚合的webhooks并简单地将更新的文档推送到同步网关是正确的选项吗?

PS:webhooks + Rest APIS选项目前对我来说非常适合。只是想了解这一跳是否必要?

1 个答案:

答案 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查询存储桶是完全正常的。