gpt4 book ai didi

c# - MongoDB .NET 未在 upsert 上生成 _id

转载 作者:IT老高 更新时间:2023-10-28 13:11:34 30 4
gpt4 key购买 nike

我正在尝试使用 .NET 驱动程序将文档插入到 MongoDB 2.4.4 中。它似乎不会在 upsert 上自动生成 _id,尽管它确实在普通插入上正确生成了 _id。如何使驱动程序正确生成 _id

这是一个演示问题的小例子。

public class MongoObject
{
[BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
[BsonRepresentation(BsonType.ObjectId)]
public string MongoID { get; set; }

public int Index { get; set; }
}

var obj = new MongoObject()
{
Index = 1
};

//This inserts the document, but with a _id set to Null
_collection.Update(Query.EQ("Index", BsonValue.Create(1)), Update.Replace(obj), UpdateFlags.Upsert, new WriteConcern() { Journal = true });

//This inserts the document with the expected autogenerated _id
//_collection.Insert(obj);

最佳答案

当然,我在发布问题后会立即找到答案。来自 this answer ,解决方法是给ID添加一个[BsonIgnoreIfDefault]属性。在问题的示例中,它将是:

public class MongoObject
{
[BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnoreIfDefault] // <--- this is what was missing
public string MongoID { get; set; }

public int Index { get; set; }
}

关于c# - MongoDB .NET 未在 upsert 上生成 _id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20223894/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com