我有一个包含Notes子文档的用户文档。 我正在使用以下代码为具有给定电子邮件地址的用户推送新笔记。
UserSchema.statics.addNotesToUser = function (email, notes, callback) {
return this.updateOne(
{'email': email},
{$push: {notes}},
callback
)
};
这很好,但是它忽略了我对NoteSchema的唯一约束。这些是我的模式
const NoteSchema = new Schema({
_id: false,
id: {type: String, required: true, trim: true, unique: true},
content: {type: String, required: true, trim: true, lowercase: true},
added: {type: Date, default: Date.now},
used: {type: Date, default: Date.now},
book: {
name: {type: String, required: true}
}
});
const UserSchema = new Schema({
email: {type: String, required: true, trim: true, lowercase: true, unique: true},
notes: [NoteSchema]
});
我想知道如何确保在向用户推送新笔记时可以验证笔记ID是否唯一。
谢谢。
答案 0 :(得分:0)
要实现子文档中的功能等唯一性约束,希望可以。
let notesId = [];
notes.forEach(function(val,index){
notesId.push(val.id)
})
db.yourCollection.update(
{ 'email': email, 'NoteSchema.id': { '$ne': { $each: notesId } }},
{$push: {notes} },
callback)