我想创建一个架构,我可以为用户设置一个特定的名称,例如许多人可以拥有的显示名称,同时还允许人们根据该名称添加它们。我的解决方案是将该名称保存到具有两个字段的模型中,其中一个字段是名称本身,第二个字段的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();
它会自动为我设置字段吗?
编辑:我意识到原始问题中没有足够的细节:我想使用mongoose的内置后保存处理程序在创建时为我生成这个字段。它创建后不应更新,仅在第一次设置。
答案 0 :(得分:0)
你可以使用如下所示的功能来做那件事。
function saveDisplayName(schema) {
var query = DisplayName.find({name: schema.name});
query.then(function(results) {
var userNumber = 1;
if (results.length < 1) {
return userNumber;
}
for (var i = 0; i <= results.length - 1; i++) {
var result = results[i];
if (userNumber <= result.number) {
userNumber = result.number + 1;
}
if (i == results.length - 1) {
return userNumber;
}
}
}).then(function(userNumber) {
schema.number = userNumber;
var displayName = new DisplayName(schema);
return displayName.save();
}).then(function(data) {
console.log('Data saved', data)
}).then(null, console.log);
}
&#13;