409の代わりに_conflictsを使用して作成または更新します

ronag

それはすることが可能であるputbulkDocsのCouchDB / pouchdbへとIEでリビジョンを受賞し、複製と同じ動作を得る_conflicts代わりに409応答?

基本的にconflict、次のコードではこのケースを避けたいと思います。

  const docs = Object
    .keys(pendingSet)
    .map(id => toDoc(deepClone(pendingSet[id]), { id, rev: this.revCache.get(id) }))

  const results = await this.db.bulkDocs(docs)
  const conflicts = []

  for (let n = 0; n < results.length; ++n) {
    const result = results[n]
    if (result.error === 'conflict') {
      // TODO: This needs review...
      const doc = await this.db.get(docs[n]._id)
      const rev = `${doc._rev.split('-')[0]}-${this.serverName}`
      conflicts.push({
        ...docs[n],
        _rev: rev
      })
      this.revCache.set(doc._id, rev)
    } else if (result.error) {
      callback(result.error)
    } else {
      this.revCache.set(result.id, result.rev)
    }
  }

  await this.db.bulkDocs(conflicts, { new_edits: false })

pouchdbから少しヒントを得ましたが、それを適用する方法がまだわかりません。

編集1:最新のコードで更新されました。

グリンバード

CouchDBは競合から自身を保護しようとするため、CouchDBが「認識している」ドキュメントのリビジョンを変更しようとすると、すでに置き換えられており、409応答が返されます。

レプリケーションが「それを回避する」方法は、ドキュメントがフラグ「new_edits = false」でターゲットマシンに一括書き込みされるためです。これは、CouchDBにリビジョントークンをポリシングするのではなく、着信トークンを受け入れるように指示します(レプリケーションソースからの書き込みにはすでに独自のリビジョンツリーがあります)。

あなたはこのような呼び出しでこれを自分で行うことができます:

ccurl -X POST -d '{"docs":[{"_id":"x","_rev":"1-myrevtoken","y":3}],"new_edits":false}' '/a/_bulk_docs'

この場合、すでに「リビジョン2」が含まれているドキュメントに2番目の「リビジョン1」を強制しました。

id = x
├─ 1
│  ├─ 1-myrevtoken
│  └─ 1-a6664c0114e6002415a47b18d4c9d32f
└─ 2-bca8f049e40b76dbfca560e132aa5c31 *

勝者はまだ「リビジョン2」ですが、リビジョン1での競合は、解決することを決定するまで未解決のままです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Hibernateエンティティは、saveAndFlushを使用して新しい行を作成する代わりに、既存の行を更新します

分類Dev

Spring Bootは、更新する代わりに新しい行を作成します

分類Dev

Android Firebaseは、setValueが新しいレコードを作成する代わりに、既存の値を更新します

分類Dev

印刷の代わりにログまたは戻り値を使用してクリックをテストする

分類Dev

新しいテーブル既存のテーブルを更新する代わりに作成されました。CompositeKey、springboot、hibernateを使用したOneToManyマッピング

分類Dev

.zeroを使用していますか?== 0の代わりに?

分類Dev

TRUNC()関数をCOUNTIFS()の範囲に適用します。または、代わりにSUMPRODUCT()を使用しますか?

分類Dev

TomcatはKeyCloakTomcat ValveSAML認証の代わりにFormAuthenticationを使用しています

分類Dev

PHPは挿入する代わりに更新しています

分類Dev

Spring Data @QueryはNVARCHARの代わりにVARCHARを使用します

分類Dev

Seleniumはgoogle-chromeの代わりにChromiumを使用します

分類Dev

delayd_paperclipはResqueの代わりにActiveJobを使用します

分類Dev

RestangularはGETの代わりにHTTPOPTIONSを使用します

分類Dev

CkEditorは<strong>の代わりに<b>タグを使用します

分類Dev

Html.RenderActionはGetの代わりにPostを使用します

分類Dev

joomla BASEHREFはHTTPSの代わりにHTTPを使用します

分類Dev

ibatisはORの代わりにINを使用します

分類Dev

GoogleChromeはpulseaudioの代わりにalsaを使用します

分類Dev

S3はPOSTの代わりにPUTを使用します

分類Dev

HibernateはIntの代わりにBigDecimalを使用します

分類Dev

入力値の代わりに別の属性を使用して合計を更新します

分類Dev

forループの代わりにStreamを使用して増分intの配列を作成します

分類Dev

forループの代わりにStreamを使用して増分intの配列を作成します

分類Dev

TypeOrm:整数の代わりにキーのuuidデータ型を使用してManyToOne関係を作成します

分類Dev

複数の変換の代わりに、matrix3Dを使用して立方体を作成しますか?

分類Dev

Unix zipコマンドは、新しいアーカイブを作成する代わりに、既存のアーカイブを更新しています

分類Dev

Unix zipコマンドは、新しいアーカイブを作成する代わりに、既存のアーカイブを更新しています

分類Dev

ファイルを保存するためにZIPまたはRARの代わりにISOを使用しますか?

分類Dev

SQLステートメントの代わりにCSVファイルを使用してJavaResultSetを作成します

Related 関連記事

  1. 1

    Hibernateエンティティは、saveAndFlushを使用して新しい行を作成する代わりに、既存の行を更新します

  2. 2

    Spring Bootは、更新する代わりに新しい行を作成します

  3. 3

    Android Firebaseは、setValueが新しいレコードを作成する代わりに、既存の値を更新します

  4. 4

    印刷の代わりにログまたは戻り値を使用してクリックをテストする

  5. 5

    新しいテーブル既存のテーブルを更新する代わりに作成されました。CompositeKey、springboot、hibernateを使用したOneToManyマッピング

  6. 6

    .zeroを使用していますか?== 0の代わりに?

  7. 7

    TRUNC()関数をCOUNTIFS()の範囲に適用します。または、代わりにSUMPRODUCT()を使用しますか?

  8. 8

    TomcatはKeyCloakTomcat ValveSAML認証の代わりにFormAuthenticationを使用しています

  9. 9

    PHPは挿入する代わりに更新しています

  10. 10

    Spring Data @QueryはNVARCHARの代わりにVARCHARを使用します

  11. 11

    Seleniumはgoogle-chromeの代わりにChromiumを使用します

  12. 12

    delayd_paperclipはResqueの代わりにActiveJobを使用します

  13. 13

    RestangularはGETの代わりにHTTPOPTIONSを使用します

  14. 14

    CkEditorは<strong>の代わりに<b>タグを使用します

  15. 15

    Html.RenderActionはGetの代わりにPostを使用します

  16. 16

    joomla BASEHREFはHTTPSの代わりにHTTPを使用します

  17. 17

    ibatisはORの代わりにINを使用します

  18. 18

    GoogleChromeはpulseaudioの代わりにalsaを使用します

  19. 19

    S3はPOSTの代わりにPUTを使用します

  20. 20

    HibernateはIntの代わりにBigDecimalを使用します

  21. 21

    入力値の代わりに別の属性を使用して合計を更新します

  22. 22

    forループの代わりにStreamを使用して増分intの配列を作成します

  23. 23

    forループの代わりにStreamを使用して増分intの配列を作成します

  24. 24

    TypeOrm:整数の代わりにキーのuuidデータ型を使用してManyToOne関係を作成します

  25. 25

    複数の変換の代わりに、matrix3Dを使用して立方体を作成しますか?

  26. 26

    Unix zipコマンドは、新しいアーカイブを作成する代わりに、既存のアーカイブを更新しています

  27. 27

    Unix zipコマンドは、新しいアーカイブを作成する代わりに、既存のアーカイブを更新しています

  28. 28

    ファイルを保存するためにZIPまたはRARの代わりにISOを使用しますか?

  29. 29

    SQLステートメントの代わりにCSVファイルを使用してJavaResultSetを作成します

ホットタグ

アーカイブ