2011-11-09 16 views
0

MongoDB Save(C#ドライバ)で奇妙な状況があります。私は既存の文書を保存しています(キーはBsonDocument内に保存されています)。 My Saveステートメントは次のようになります。MongoDB Saveは既存の要素を削除しません

SafeModeResult result = moleculeCollection.Save(moleculeDoc, SafeMode.True); 

ここで、moleculeDocはBsonDocumentです。保存されている分子DocBodyDocument内の要素は異なる場合があります。場合によっては、保存されているmolecularDoc BsonDocumentに含まれていないため、データベース内の既存の文書の要素が削除されることがあります。

保存に成功した後、保存されているBsonDocument内に存在しないにもかかわらず、一部の要素がデータベース保有の文書内に残ります。 SECOND時間を保存すると、これらの要素は通常消えます。

は、私は慎重に目を球状にBsonDocument詳細に先立って保存する必要があり、それは間違いなく保存した後に表示される特定の要素が含まれていません(ただし、これは、保存する前に、データベース・開催ドキュメント内に存在しなかった。

ここ

は、保存されたドキュメントの例です:

{ 
    "_id": { 
    "$binary": "qAvZU8AzqES1fv0OL9GaBw==", 
    "$type": "03" 
    }, 
    "title": "Url 1a", 
    "mediatype": "url", 
    "modifieddate": "Wed, 09 Nov 2011 11:56:57 GMT", 
    "filename": "iphone.pdf", 
    "contenttype": "application/pdf", 
    "weburi": "ffff" 
} 

注「ファイル名」の要素が保存されたBsonDocument内ではなかったことを、まだそれはデータベース前であったこと、保存した後、所定の位置に残っています保存します。

一つの奇妙な側面は、セカンドセーブ後にこれらの「ゴースト」要素を削除することです。

誰もがこれにどのような光を当てることができますか?

+0

mongodb saveはupsert(更新のようにフィールドレベルではなくドキュメントレベル)であると確信しています。 IDが存在する場合はドキュメント全体をオーバーライドし、新しいIDを作成する場合はそれを上書きします。だから新しい文書のどのフィールドが保存されているドキュメントにあるのかだけです。何がmolecularCollectionのタイプですか?それはMongoCollectionですか? – RameshVel

答えて

0

保存すると、既存のドキュメントが新しいドキュメントに完全に置き換えられます。既存のドキュメントが見つからない場合は、新しいドキュメントが挿入されます。あなたが描写している行動は不可能であるべきです。

再現可能なケースを供給できる場合は、jira.mongodb.orgでJIRAチケットを作成してください。

また、私は_id値としてUUIDを使用していることに気付きました。歴史的な理由から、異なるドライバは、データベースにUUIDを保存するとき(バイナリ値が異なるため)、異なるバイトオーダーを使用しています。特に、mongoシェルとC#ドライバは同じバイトオーダーを使用しないので、同じドキュメントを見ないかもしれません。

関連する問題