如何在猫鼬中创建复合独特的自动增量场?

时间:2017-04-10 06:24:48

标签: node.js mongodb express mongoose mongoose-schema

我想创建一个架构,我可以为用户设置一个特定的名称,例如许多人可以拥有的显示名称,同时还允许人们根据该名称添加它们。我的解决方案是将该名称保存到具有两个字段的模型中,其中一个字段是名称本身,第二个字段的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的内置后保存处理程序在创建时为我生成这个字段。它创建后不应更新,仅在第一次设置。

1 个答案:

答案 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;
&#13;
&#13;