0

私はこれを持っています

{
 "ClockID" : "fd51b6e0-5b81-49ab-8424-71fd768281b2",
 "ClockName" : "AAA-TEST123-002",
 "FilesList" : [{
                 "FileName" : "AAA-TEST123-002.mpg",
                 "FileLocationHistory" :    [{
                                               "FullPath" : "192.168.32.166/Ingestion",
                                               "AllowDeleteOnCancel" : false,
                                               "_id" : "565b7343-9dc5-4916-a788-0f392fce2502"
                                    }],
                  "_id" : "15b54499-a0be-4278-82ed-58c82c13bd40",
               }],
 "_id" : ObjectId("510164d0a63cfa2250fd6d19"),
 "_t" : "ClockRecord"

これで FileLocationHistory 配列ドキュメントを更新すると:

    public void UpdateClockFilesLocationRecord(string collectionName, ClockFileLocationHistoryRecord clockFileLocationHistory, BsonObjectId clockDocumentID, string clockFileDocumentID)
    {
        var mongoCollection = MongoDatabase.GetCollection<ClockRecord>("Clocks");
        var update = Update.Set("FilesList.$.FileLocationHistory", BsonDocumentWrapper.Create<ClockFileLocationHistoryRecord>(clockFileLocationHistory));
        var modeResult = mongoCollection.Update(
             Query.And(
                Query.EQ("_id", clockDocumentID),
                Query.EQ("FilesList._id", clockFileDocumentID)
                ), 
              update, UpdateFlags.Upsert
              );
    }

更新は完了しますが、ドキュメントは配列ではなくなります:

{
 "ClockID" : "fd51b6e0-5b81-49ab-8424-71fd768281b2",
 "ClockName" : "AAA-TEST123-002",
 "FilesList" : [{
                 "FileName" : "AAA-TEST123-002.mpg",
                 "FileLocationHistory" :    {
                                               "FullPath" : "192.168.32.166/Ingestion",
                                               "AllowDeleteOnCancel" : false,
                                               "_id" : "565b7343-9dc5-4916-a788-0f392fce2502"
                                    },
                  "_id" : "15b54499-a0be-4278-82ed-58c82c13bd40",
               }],
 "_id" : ObjectId("510164d0a63cfa2250fd6d19"),
 "_t" : "ClockRecord"

つまり、ドキュメントは、ドライバーが認識しないオブジェクトとして逆シリアル化しようとします。

更新コードの何が問題になっていますか?

4

1 に答える 1

0

それ以外の:

var update = Update.Set("FilesList.$.FileLocationHistory", BsonDocumentWrapper.Create<ClockFileLocationHistoryRecord>(clockFileLocationHistory));

プッシュを使用できます:

var update = MongoUpdate.Push("FilesList.$.FileLocationHistory", BsonDocumentWrapper.Create<ClockFileLocationHistoryRecord>(clockFileLocationHistory));

... 配列に追加する

于 2013-01-28T17:40:11.903 に答える