【问题标题】:How do I create a compound unique autoincrementing field in mongoose?如何在猫鼬中创建复合独特的自动增量字段?
【发布时间】:2017-04-10 23:00:07
【问题描述】:

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

【问题讨论】:

  • 您需要在每次保存和更新此集合时自动递增数字字段吗?

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


【解决方案1】:

您可以使用如下所示的函数来执行此操作。

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);
}

【讨论】:

  • 我知道有一个功能可用,也可以添加一个保存后处理程序,我想知道mongoose是否有内置的
  • 不知道mongoose有没有。
猜你喜欢
  • 2017-06-01
  • 2014-07-29
  • 2014-06-10
  • 2018-12-12
  • 2015-04-06
  • 2018-01-05
相关资源
最近更新 更多