Node.js Mongoose不验证查询上的模式
Mongoose似乎只在对数据库进行写入时才强制进行模式验证,而不是在查询数据库时。更具体地说,Node.js Mongoose不验证查询上的模式,node.js,mongodb,validation,mongoose,Node.js,Mongodb,Validation,Mongoose,Mongoose似乎只在对数据库进行写入时才强制进行模式验证,而不是在查询数据库时。更具体地说,模式中未定义的属性仍然由查询返回 var mongoose = require("mongoose"); // MongoDB collection "test.objs" is filled with one object: { a: 1 } mongoose.connect("mongodb://localhost:27017/test"); schema = new mongoose.
模式
中未定义的属性仍然由查询返回
var mongoose = require("mongoose");
// MongoDB collection "test.objs" is filled with one object: { a: 1 }
mongoose.connect("mongodb://localhost:27017/test");
schema = new mongoose.Schema({ b: Number });
model = mongoose.model("obj",schema);
// Prints {}, as expected
console.log(new model({ a: 1 }));
// Prints { a: 1 } but I expect {}
model.find(function(e,val){ console.log(val[0]) });
model.find(function(e,val){ console.log(val[0].toObject({ strict: true })); });
如何对读取查询进行模式验证?可能会对您有所帮助。问题不在于字段的投影/选择,而在于字段的验证。考虑到属性
a
不在架构中,甚至不可能选择/查看该属性。Mongoose不会验证特定mongodb
集合中的对象是否具有在相应集合架构中定义的相同键。运行查询时,它将返回与查询条件匹配的文档,即它们的持久化方式。如果要筛选必须显示的字段,则必须指定它。这就是我链接答案的原因。谢谢,这回答了我的问题!