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)。

Mongodb c#在结果中包含子属性,以便映射到结果类

你可能做不到。SetFields 可用于选择返回哪些字段,但不能用于改变返回文档的形状。反序列化 LogDto 所需的所有值都必须来自 BSON 文档的同一级别(而不是其中一些嵌套在 ModelNumber 和 Make are 等请求中)。

您必须使类与文档格式匹配,或者更改文档格式以匹配类。