MongoDB updateOne

时间:2017-08-04 00:41:46

标签: c# mongodb

我正在尝试更新现有的Mongo记录,但我收到“其他信息:元素名称'ID'无效'。”错误

我有一个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文档中的现有字段。

1 个答案:

答案 0 :(得分:7)

我的问题是因为我在尝试更新时没有正确的值。我的代码适用于此:

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。