Mongodb c#在结果中包含子属性,以便映射到结果类
本文关键字:结果 映射 包含 Mongodb 属性 | 更新日期: 2023-09-27 18:35:04
我有以下代码在工作:
var Logs = MvcApplication.MongoLoggingDatabase.GetCollection<Log>("Log")
.Find(queryDocument)
.Select(x => new LogDto { ModelNumber = x.Request.ModelNumber, Make = x.Request.Make, TimeStamp = x.TimeStamp, UserId = x.UserId })
.OrderByDescending(x => x.TimeStamp)
.Skip(pageSize * (page - 1))
.Take(pageSize);
我很乐意将结果映射到 LogDto。 但是我想知道我是否可以改用 FindAs,这样我就可以查询我想要的字段并按预期映射 cooresponse 子属性。
我尝试了如下方法:
var Logs = MvcApplication.MongoLoggingDatabase.GetCollection<Log>("Log")
.FindAs<LogDto>(queryDocument)
.SetFields(Fields.Exclude("_id").Include("TimeStamp", "UserId", "Request_ModelNumber", "Request_Make"))
.OrderByDescending(x => x.TimeStamp)
.Skip(pageSize * (page - 1))
.Take(pageSize);
时间戳和用户 ID 映射正确,但"制造"和"型号"仅显示空。 我想知道如何使用 SetFields 将 Request.ModelNumber 和 Request.Make 映射到 LogDto 上的相应字段(Make 和 Model)。
你可能做不到。SetFields 可用于选择返回哪些字段,但不能用于改变返回文档的形状。反序列化 LogDto 所需的所有值都必须来自 BSON 文档的同一级别(而不是其中一些嵌套在 ModelNumber 和 Make are 等请求中)。
您必须使类与文档格式匹配,或者更改文档格式以匹配类。