0

時間をかけて couchbase のドキュメントに連結する文字列がいくつかあります。私はclojureでこれをやっています、コードはかなり簡単です

;create document when new
(cbc/add client key value)

;append when document exists
(c/async-prepend client key (str "," value) (c/get-cas-id client key)

そして、これはすべて正常に機能します。議論したい問題の手順を大まかに説明すると、次のようになります。

  1. 加算値:「1」
  2. 値の取得:1
  3. 付加値 ",2"
  4. 値の取得:1,2

これはうまく機能し、すべてがうまくいきます。しかし、この質問は実際には先頭に追加することではなく、まだ有効なjsonである方法でcouchbaseに先頭に追加しています。1,2は有効な json ではないため、 couchbase UI には base64 でエンコードされた値が表示されるか、無効な json と表示されることがあります (memcache と api から正しい値が返される場合でも)。

カウチベース フォーラムから、これが予想される動作であることを知りました。これを避けて、値を有効なjson形式で保存(および追加)したいと思います。

私は次のようなことができます

{ "vals" : [1,2] } 

vals毎回に追加しますが、今、追加3すると[1,2], 3、有効なjsonではないことが判明します。

値を取得し、終了ブラケットを削除し、新しい値を追加し、ブラケットを終了して再度保存したくありません。これは、(1) 追加の目的を無効にし、(2) ドキュメントがどんどん大きくなり、効率的ではないためです。すべての値を読み取り、毎回新しい値を追加します。

最後に、ここでの私の質問は次の 2 つに要約されます。

1) データをそのままにしておいても大丈夫ですか - とにかく API から適切なデータを取得していますが、UI はデータを表示できないか、base64 でエンコードされたデータを表示するので編集できません..それが唯一の方法です欠点 (UI からデータを編集する必要があるのはなぜですか?)

2)これを回避する方法がある場合、毎回有効なjsonにする方法でデータを保存する方法があるため、APIだけでなくUIにも表示されます。- これの欠点は、ドキュメントがはるかに大きくなり、必要なデータを取得するために必要な処理が多くなることです ({ "value": [1, 2]}逆に1,2)

言うまでもなく、さらに値を追加する方法がまだわかりません!

アドバイスしてください!

4

2 に答える 2

0

それがうまくいくかどうかはわかりませんが、そのようなトリックを試すことができます:そのcsv値を指すキーを保持するプロパティを使用して、有効なJSONドキュメントをデータベースに保存します。例:

doc: { "doc.id":"some_id", "doc.type":"some_type", "doc.values":"values:for:doc_some_id" }

次に、そのキーにcsvデータを追加/先頭に追加するとvalues:for:doc_some_id、次のようになります。

"key": "values:for:doc_some_id", "value": "1,2,3..."

そして、発行関数で正しいjsonドキュメントを取得し、値を保持するキーを取得してから、そのキーで値を取得します。照合ビューについては、このリンクを参照してください。私はそれらを使用したことはありませんが、必要なものを実装するには、その例の手順に従ってください。

于 2013-06-12T14:56:00.470 に答える