embedded式文档的Mongoose.js模式选项不起作用
我对node.js和mongoose很新。 我有如下的架构。
var sub = Schema({"title": {type: String, required: true, trim: true, unique: true}, "uniqueId": Schema.ObjectId} var main = Schema({"name": {type: String, required: true, index: { unique: true, dropDups: true}, "subs": [sub]}
这是工作。 文件被插入。 替补正在增加。 问题如下。
我在这里期待的是当我添加新的主入。 它会检查标题是否存在,如果不是,则抛出exception。 它将检查标题是否唯一。 此外,它将自己将对象id分配给uniqueId字段。 但是这没有发生。 这不是检查标题是否存在和唯一。 另外,objectId没有被赋值给uniqueId,而是赋给_id。
这里是将sub添加到main的代码。
MainModel.findByIdAndUpdate( request["_id"], {$push: {subs: {"title": "New title"}}}, {}, function(err, doc) { console.log(err); console.log(doc); } );
Mongoose将此查询logging为。
MainModel.findAndModify({ _id: ObjectId("537caa880519db710d7b5b2a") }) [] { '$push': { subs: { _id: ObjectId("537d6b96f927d6573c6e1044"), title: 'New title' } } } { upsert: false, new: true }
如果您看到ObjectId被分配给_id而不是uniqueId。 此外,它不检查标题是否存在并且是唯一的。
可能是我身边有一个愚蠢的错误。 我在这里错过了什么。
当使用任何findAndModify帮助器时,默认值,设置器,validation器和中间件不会被应用。 看到这里http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate