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 (今日のベータ版) では、object_remove関数を使用できます。

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

結果:

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

現在の設定はわかりませんが、データの変更に REST API を使用している間、N1QL を介してバケットをクエリし続けることはまったく問題ありません。

于 2016-05-04T19:26:46.850 に答える