2017-04-10 30 views
1

我想創建一個模式,我可以爲用戶設置一個特定的名稱,例如許多人可以擁有的顯示名稱,同時也允許用戶根據該名稱添加它們。我的解決方案是將該名稱保存到帶有兩個字段的模型中,其中一個是名稱本身,另一個具有表示當前正在使用名稱的次數的ID。如何在貓鼬中創建複合獨特的自動增量場?

var DisplayName = new Schema({ 
    account: { 
     type: ObjectId, 
     ref: 'Account', 
    }, 
    name: { 
     type: String, 
     trim: true, 
     required: true, 
    }, 
    number: { 
     type: Number, 
     required: true, 
    } 
}); 

是我,但我希望能夠只說

var displayName = new DisplayName({ 
    name: 'name', 
    account: req.user.id 
}); 

displayName.save(); 

,它會自動設置字段我嗎?

編輯:我意識到沒有足夠詳細的原題:

我想用貓鼬的內置後的保存處理程序來生成這個領域我的創作。它創建後不應該更新,只能在第一次設置。

+0

你需要的數字字段設置爲自動增量爲每個儲存和更新這個收藏? –

回答

0

您可以使用如下所示的功能來做這件事。

function saveDisplayName(schema) { 
 
\t var query = DisplayName.find({name: schema.name}); 
 

 
\t query.then(function(results) { 
 

 
\t \t var userNumber = 1; 
 
\t \t if (results.length < 1) { 
 
\t \t \t return userNumber; 
 
\t \t } 
 
\t \t for (var i = 0; i <= results.length - 1; i++) { 
 
\t \t \t var result = results[i]; 
 

 
\t \t \t if (userNumber <= result.number) { 
 
\t \t \t \t userNumber = result.number + 1; 
 
\t \t \t } 
 
\t \t \t if (i == results.length - 1) { 
 
\t \t \t \t return userNumber; 
 
\t \t \t } 
 
\t \t } 
 
\t }).then(function(userNumber) { 
 
\t \t schema.number = userNumber; 
 

 
\t \t var displayName = new DisplayName(schema); 
 

 
\t \t return displayName.save(); 
 
\t }).then(function(data) { 
 
\t \t console.log('Data saved', data) 
 
\t }).then(null, console.log); 
 
}

+0

我知道一個函數可用,也可以添加一個保存後處理程序,我只想知道貓鼬是否有內置的一個 –

+0

我不知道貓鼬是否擁有它。 – Tolsee