mongoose 混合类型数据无法写入的BUG

混合类型是指: 当你在 schema 中没有指定字段的类型, 而是使用如 “{}” 之类的类型定义又或者是通过 Schema.Types.Mixed 指定时, 如下两种情况是相等的:

var Any = new Schema({ any: {} });
var Any = new Schema({ any: Schema.Types.Mixed });

如果你使用这种未指定 schema 类型的字段 (schema-less type), 你可以按照你的想法存储任意类型的数据, 但是 Mongoose 也会失去自动检测更改然后 save 更改的能力 (mongoose 为了保证写入的效率, 会做修改检测, 未检测到修改的话就不会写入数据库). 如果要让 Mongoose 去 save 这种混合类型, 你需要主动告诉 Mongoose 该字段有更改, 即调用 document 的 .markModified(path) 方法来做标记, 这样 Mongoose 才知道这个混合字段有更改, 然后才会 save 写入库.

person.anything = { x: [3, 4, { y: "改变" }] };
person.markModified('anything');
person.save(); // anything 字段将会被写入库

官方文档:http://mongoosejs.com/docs/schematypes.html#mixed

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s