猫鼬(mongodb)$ push数据作为子文档,是否唯一?

时间:2018-10-25 06:22:51

标签: javascript mongodb mongoose

我有一个包含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是否唯一。

谢谢。

1 个答案:

答案 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)