4

我想知道是否可以使用 N1QL 查询同步网关存储桶?它的行为是像普通的沙发基础存储桶一样,还是由于同步网关添加的元数据,是否可以仅通过 Rest API 查询它?

目前,我有一个 webhook 处理程序,它保留了位于同步网关存储桶下的文档的副本。我需要做一些需要推回给客户的聚合。那么,我可以通过 n1ql 在同步网关上直接完成所有这些繁重的工作,还是使用 webhook 进行聚合并简单地将更新的文档推送到同步网关是正确的选择?

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

4

1 回答 1

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 查询存储桶是非常好的。

于 2016-05-04T19:26:46.850 回答