2017-08-04 46 views
0

我試圖更新現有的Mongo記錄,但我得到一個「附加信息:元素名'ID'無效'。」錯誤MongoDB updateOne

我有AA BsonDocument 「文件」 包含數據,我從看起來像這樣的另一個源中檢索:

{ "ID" : "ABCecdcf9851efbf0ef66953", ListingKey : "234534345345", "Created" : ISODate("2017-08-04T00:31:23.357Z"), "Modified" : ISODate("2017-08-04T00:31:23.358Z"), "Field1" : 1, "Field2" : "0.09", "Field3" : "1.10", "Field4" : "1", "Field5" : "1" } 

這裏是我寫的C#代碼:

var collection = db.GetCollection<BsonDocument>("MyCollection");        

//Hard coded for testing 
var filter = Builders<BsonDocument>.Filter.Eq("ListingKey", "234534345345"); 

collection.UpdateOne(filter, document); 

這與我試圖用來更新的BsonDocument相關嗎?我發現這個文檔,這使我認爲這是原因。如果是這樣,有沒有辦法用我提供的格式進行更新?

https://docs.mongodb.com/getting-started/csharp/update/

我有一個過程的工作哪裏會刪除該文件,然後添加一個新的文件,但出於效率的緣故,我需要這個更新。理想情況下,它只會更新BsonDocument中的字段,並保持Mongo文檔中的現有字段不變。

+0

'document'的實際內容是什麼?如果它看起來和上面列出的完全一樣,那麼'ISODate'不是一個有效的參數,因爲C#中沒有這樣的對象構造函數。你可能有一個JSON字符串或只是一個「字符串」的屬性。因此錯誤。 –

+0

@NeilLunn我認爲這是一個json字符串。它在第一個元素(ID)上失敗。我會用更好的數據更新這個問題。該字段不是ObjectId或Mongo中的任何特殊字段。 – ferensilver

+0

那麼我「假設」一樣好。但除非你提出你在這裏要做的事情的「完整背景」,否則沒有人可以確定。這就是我所要求的,爲什麼我問它。所以請[編輯你的問題](https://stackoverflow.com/posts/45496613/edit)與所要求的細節。 –

回答

0

我的問題是因爲我試圖更新時沒有正確的值。我的代碼適用於此:

var collection = db.GetCollection<BsonDocument>("MyCollection");        

//Hard coded for testing 
var filter = Builders<BsonDocument>.Filter.Eq("ListingKey", "234534345345"); 

var update = Builders<BsonDocument>.Update.Set("Created", DateTime.UtcNow); 
foreach (BsonElement item in document) 
{ 
    update = update.Set(item.Name, item.Value); 
} 
var result = collection.UpdateOne(filter, update); 

我必須將我的字符串轉換爲更新BsonDocument。