我正在使用ASP.net Core、MongoDB.Driver 2.13.0和一个具有以下结构的MongoDB文档:
"lrec80" : [
{
"RR4NFAD" : {
"$ref" : "RR4OCO",
"$id" : ObjectId("00000000000000008c8a414b"),
"$db" : "tpfdf"
},
"RR4NRCC" : 43,
"RR4NAKY" : 0,
"RR4NA80" : {
"RR4NSDT" : { "$binary" : "UOE=", "$type" : "00" }
},
"RR4NPDT" : { "$binary" : "UOs=", "$type" : "00" },
"RR4NTY1" : -124,
"RR4NCTY" : "IAH",
"RR4NLIA" : null,
"RR4NNBR" : 1
}, 我的POCO对象几乎映射了我需要的所有字段,但"RR4NFAD“对象除外。
public class RR4NFAD
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public ObjectId Id { get; set; }
[BsonElement("$ref")]
public string Ref { get; set; }
[BsonElement("$db")]
public string DB { get; set; }
}如果我将Id属性设置为ObjectId类型,则成功获得DB和Ref字段,但Id字段显示如下:
Id = {000000000000000000000000}
CreationTime = 1/1/1970 12:00:00 AM
Increment = 0
Machine = 0
Pid = 0
Timestamp = 0如果我将Id字段设置为string:
public class RR4NFAD
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[BsonElement("$ref")]
public string Ref { get; set; }
[BsonElement("$db")]
public string DB { get; set; }
}Id作为空返回,但我仍然成功地获得了DB和Ref字段。
我尝试创建一个ObjectIdConverter,但没有成功,并使用以下示例将其作为Id字段的属性应用:
如何将RR4NFAD Id字段作为查询另一个文档的引用作为以下内容之一返回?
谢谢你能提供的任何帮助。这似乎是一个简单的问题,但我对MongoDB并不熟悉,这给我带来了麻烦。
发布于 2022-09-16 02:28:11
问题与关注
据科瓦克斯称,
如果没有显式分配.NET/C#驱动程序,则会自动添加_id成员。驱动程序自动将类的Id属性映射到数据库中的_id字段。如果需要的话,可以使用类映射属性或代码配置覆盖这一点。
这就是为什么您的Id在RR4NFAD类中无法获得值,因为它正在被转换为_id而不是Id。
溶液
BsonClassMap.RegisterClassMap<RR4NFAD>(cm =>
{
cm.AutoMap();
cm.UnmapProperty(c => c.Id);
cm.MapMember(c => c.Id)
.SetElementName("$id");
});演示

https://stackoverflow.com/questions/73738948
复制相似问题