我有以下内容:
var P = Builders<T>.Projection.Include(_ => _.AccountId);
var R = Mongo.Find(E).Project(P).FirstOrDefault();
这是我不明白的地方:
根据该预测,我需要T包括AccountId,但也需要_id。 如果我不包含_id,我会收到以下错误:
{"Element '_id' does not match any field or property of class T."}
如果我尝试排除_id,请执行以下操作:
var P = Builders<T>.Projection.Include(_ => _.AccountId).Exclude(_ => _._id);
var R = Mongo.Find(E).Project(P).FirstOrDefault();
我得到了一个不同的错误:
{"Element 'CreatedOn' does not match any field or property of class T."}
CreatedOn是数据库中记录的另一个字段。
所以,我恐怕我不明白投影是如何运作的: 我需要提取一个字段(AccountId)和其他任何字段(没有_id)等(理想情况下将其映射到字符串而不是仅包含字符串的类,但这是次要问题)
我错过了什么?
我是否理解包含意味着采用空白平板,添加Include语句中指定的所有字段(以及_id由于某种原因),而排除意味着'采取一切'并排除特定领域? 在这种情况下,这两个命令将是独占的。
另外,我可以使用:
Expression(_ => _.AccountId)
在我的预测中,我得到了我想要的结果,但这并没有说明包括/排除
答案 0 :(得分:0)
该错误表示数据库返回的文档包含字段CreatedOn
,该字段在T
类中不存在。您需要将该字段添加到类T
,如此(假设CreatedOn
是DateTime
)
public DateTime CreatedOn { get; set; }