我想要完成的是在主文档中有一个对象数组(子文档方式:在架构中定义),我希望这个子文档表现得像一个文档本身。
也就是说,当将一个对象推入子文档数组时,我希望它抛出一个错误:
- 如果
unique
正在插入的对象的任何字段已被占用 - 如果插入的对象不匹配
TemplateSchema
这将是我的主要文件:
var ApplicationSchema = new mongoose.Schema({
name: {
type: String,
required: true,
unique: true
},
description: {
type: String
},
...
templates: {
type: [TemplateSchema]
}
});
以下是子文档,templates
里面的字段ApplicationSchema
:
var TemplateSchema = mongoose.Schema({
name: {
type: String,
required: true,
unique: true,
sparse: true
},
description: {
type: String
},
...
});
在这种情况下,当我尝试:
- 添加一个已存在的新对象
name
,或 - 将任何垃圾推入我的子文档
事情是这样的:
- 没有关于重复字段值的错误
{some: "trash"}
正在插入垃圾对象(即) - 不是真正的对象本身,而是在数组中推送一个空template
对象templates
我不知道为什么。
这是我用来将新模板对象插入到templates
主文档内的数组中的查询,我猜这里它没有按预期工作:
exports.create = function(id, objTemplate, callback) {
ApplicationModel.findByIdAndUpdate(
{ _id: id },
{
$push: {
"templates": objTemplate
}
},
{
safe: true,
upsert: true,
new : true
},
function(err, application) {
// handle stuff
}
);
};