我是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。此外,它不会检查标题是否存在且是唯一的。
可能是我身边有愚蠢的错误。我在这里错过了什么。
答案 0 :(得分:1)
使用任何findAndModify帮助程序时,不应用默认值,设置程序,验证程序和中间件。见http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate