嵌入式文档的Mongoose.js架构选项不起作用

时间:2014-05-22 03:42:18

标签: node.js mongoose

我是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]}

这很有效。插入文件。 Subs正在增加。问题如下。

我在这里期待的是当我将新子添加到main时。它会检查标题是否存在,如果没有则抛出异常。它将检查标题是否唯一。此外,它将自己将对象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将此查询记录为。

MainModel.findAndModify({ _id: ObjectId("537caa880519db710d7b5b2a") }) [] { '$push': { subs: { _id: ObjectId("537d6b96f927d6573c6e1044"),  title: 'New title' } } } { upsert: false, new: true }

如果您看到ObjectId被分配给_id而不是uniqueId。此外,它不会检查标题是否存在且是唯一的。

可能是我身边有愚蠢的错误。我在这里错过了什么。

1 个答案:

答案 0 :(得分:1)

使用任何findAndModify帮助程序时,不应用默认值,设置程序,验证程序和中间件。见http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate