2014-03-02 48 views
1

我用貓鼬在對象數組中插入一個對象。 我的目標是這樣的:用貓鼬在對象數組中插入一個唯一對象

name: { 
    type: String, 
    unique: true, 
    required: true 
}, 
translations: [{ 
    tag: { 
     type: String, 
     unique: true, 
     required: true 
    }, 
    meaning: { 
     type: String, 
     required: true 
    } 
}] 

我想我的代碼時,已經有在「翻譯」用相同的「標籤」值的對象拋出一個錯誤。

目前,我正在做這個:

Language.update(
    {name: languageName}, 
    {$addToSet: { 'translations': { 
     tag: aNewTag, 
     meaning: aNewTranslation 
    }}}, { 
     upsert: false 
    }, function(err) { 
     if (err) console.log(err); 
     else console.log('This is spartaaa!!!'); 
    } 
); 
+1

我不認爲這是可能的在MongoDb中的一個操作。您必須先檢查文檔,然後更新或拋出異常。 –

+0

它認爲你錯過了$ addToSet的含義。關鍵是它會**保持獨特。你傳入的任何值都已經存在,不會更新數組/集合。如果你的物品已經不是唯一的,你沒有一套。 –

回答

1

你可以在更新回調檢查寫結果,然後拋出一個錯誤,如果沒有修改,如:

Language.update(
    { 
    name: languageName 
    }, { 
    $addToSet: { 
     'translations': { 
     tag: aNewTag, 
     meaning: aNewTranslation 
    }}}, { 
    upsert: false 
    }, function(err, result) { 
    if (err) { 
     console.log(err); 
    } else if (result.nModified === 0) { 
     throw Error('Object is not unique, no duplicate inserted.'); 
    } else { 
     console.log('This is spartaaa!!!'); 
    } 
}); 

更多信息關於更新的WriteResult可以在mongoose documentation中找到。