编辑:
在尝试了这两种方法之后,我发现由于某种原因使用本地护照策略,总是排除方法对我不起作用,我真的不知道为什么。
所以,这就是我最终使用的:
Blogs.findOne({_id: id})
.populate("user", "-password -someOtherField -AnotherField")
.populate("comments.items.user")
.exec(function(error, result) {
if(error) handleError(error);
callback(error, result);
});
始终排除方法没有任何问题,只是由于某种原因它不适用于护照,我的测试告诉我,实际上密码在我想要的时候被排除/包含。include always 方法的唯一问题是,我基本上需要完成对数据库的每次调用并排除密码,这需要大量工作。
经过几个很好的答案后,我发现有两种方法可以做到这一点,“有时总是包含和排除”和“有时总是排除和包含”?
两者的一个例子:
总是包含但有时排除的例子:
Users.find().select("-password")
或者
Users.find().exclude("password")
总是排除但有时包括示例:
Users.find().select("+password")
但您必须在架构中定义:
password: { type: String, select: false }