遗漏mongoose模式属性仍在返回
给定一个如下所示的模式:
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
数据库包含集合中所有对象的“名称”。 但是,我改变它,并删除名称
var schema = new mongoose.Schema({ size: 'string' });
然后我做了一个发现:
schema.find({}).exec().then( (objs) => { // objs[0].name still exists
我认为,如果架构没有指定一个属性,那么它不会存在于find的对象。 不是这样吗? 是删除一个属性的唯一方法,实际上是从mongo中的对象中删除它?
从原来的维护者引用Aaron Heckmann :
[M]在数据库中的现有数据中“放松”,除非你告诉它,否则不要删除它。
[D]如果mongoose能够连接到这个属性,就可以工作,但是它不能。 [H]不pipe怎么样,你可以通过将值设置为
undefined
来完全删除文档中的属性,这将触发$unset
。
来源: Google网上论坛
基本上mongoose试图对现有数据没有破坏性。 如果不再需要某个属性,则可以在数据库上运行更新以取消将会从集合中的每个文档中删除属性的值。