我有一个架构:
const LinkSchema = new mongoose.Schema({
name: { type: String },
style: { default: "icon", type: String },
});
mongoDB中已有一个文档,其中可能包含许多旧字段。
{
"name": "abcLink",
"oldThing1": true,
"oldThing2": "oeunth",
....
"oldThing100": "hi",
}
我想link.findOne({ name: "abcLink" })
回来
{
"name": "abcLink",
"style": "icon"
}
目前,我得到
{
"name": "abcLink",
"oldThing": true,
"style": "icon"
}
如何strict
读取以获取未返回架构中未定义的任何字段的过滤对象?
因为我们有30多个活动字段和许多非活动字段,所以重要的一点是,我们必须定义一次架构,然后自动过滤结果。我们不想在多个地方重复有效或无效字段。注意:Object.keys
在架构上使用类似的函数来获取有效字段的数组,然后使用该函数进行过滤是完全可以接受的。
您可以toJSON
像这样使用transform函数覆盖该方法,以便该模式中没有任何字段。
const mongoose = require("mongoose");
const LinkSchema = new mongoose.Schema({
name: { type: String },
style: { default: "icon", type: String }
});
var schemaFields = Object.keys(LinkSchema.paths);
LinkSchema.set("toJSON", {
transform: function(doc, ret, options) {
let result = {};
Object.keys(ret).map(key => {
if (schemaFields.includes(key)) {
result[key] = ret[key];
}
});
return result;
}
});
module.exports = mongoose.model("Link", LinkSchema);
按照注释中提到的@Loren进行更新,对于嵌套对象,我们可以Object.keys(LinkSchema.tree)
代替Object.keys(LinkSchema.paths)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句