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