Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose不验证查询上的模式_Node.js_Mongodb_Validation_Mongoose - Fatal编程技术网

Node.js 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.

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
集合中的对象是否具有在相应集合
架构中定义的相同键。运行查询时,它将返回与查询条件匹配的文档,即它们的持久化方式。如果要筛选必须显示的字段,则必须指定它。这就是我链接答案的原因。谢谢,这回答了我的问题!