0

これは、レプリカ セットの個別のデータの設定に関する以前の質問の補足です。読み取るレプリカごとにコレクションを指定でき、実際に oplog.rs をシミュレートできることがわかりました。

これらのファイルは情報が異なるため、レプリカが同期していないことを示すエラー メッセージが表示されることはありません。

ただし、現時点で唯一の大きな問題は、データをコレクションに追加する際の _id フィールドの自動生成です。

この _id 生成をバイパスして、情報をコレクションに追加する方法はありますか? そうでない場合、追加されるドキュメント内に既に表示されている _id フィールドは、ドキュメント _id と見なされますか?

あなたの貢献に感謝します、ゴンサロ

PS: 繰り返しますが、これは Java/jsp プロジェクトの一部であり、この分野の誰かがこれを行うための関数を支援できる場合は、そうしてください!

4

1 に答える 1

3

気にしないで、公式フォーラムでこれに対する答えを見つけました。さらに参照するために、そこから得た最終的な答えを残しておきます。


注: mongoDB 開発者によると、この回答は機能すると思われますが、適切に機能させることができませんでした。自分の裁量で使用してください。何か問題が発生した場合は、バグ レポートの楽しみに参加してください。

「_id」フィールドなしでドキュメントをコレクションに追加できるようにするには、最初に Capped Collection を作成する必要があります。この Capped Collection (おそらくドキュメントによると、これらのコレクションには最大サイズを設定する必要があります) はドキュメントを取得します。デフォルトでは「_id」フィールドなしで追加されますが、状況によっては、とにかく「_id」フィールドが追加される可能性があります。この場合、「autoIndexId」を false として指定します。これは (おそらく) デフォルトを上書きし、コレクションを not に設定します。 「_id」フィールドをインデックスとして設定し、後で削除できるようにします。

要約すると、ステップ 1:
Capped Collection を作成しました。

db.createCollection("cappedcoll", {capped:true, size:100000});

ステップ 2:
コレクションをテストして、実際に「_id」フィールドを生成しているかどうかを確認します。

発生しない場合。なぜ、あなたは幸運です !おめでとう!生成する場合。ステップ 3: autoIndexId
フィールドを false に設定して Capped Collection を作成します: ステップ 4: コレクション にアイテムを追加し、更新によって「_id」フィールドを削除します:

db.createCollection("cappedcoll", {capped:true, size:100000, autoIndexId:false});



db.cappedcoll.insert({"names": {"First": "Gonza", "Last": "Vieira"}}); db.cappedcoll.update({"names.First": "Gonza"},{$unset: {"_id":1}});

この部分に到達すると、それが機能するか、"cannot modify "_id""「_id」をコレクションのインデックスに設定しないため、表示されないはずの厄介なエラーメッセージが表示されます...

これは、あなたが私とまったく同じ段階にいることも意味します。
頑張ってください。彼らがすぐにこれを修正するか、誰かがこの投稿を補足して、私が間違ったことを言ったことを修正してくれることを願っています.

于 2011-07-28T08:27:35.610 に答える