【问题标题】:Define a unique array of numbers in a mongoose Schema在 mongoose Schema 中定义一个唯一的数字数组
【发布时间】:2012-08-27 19:41:47
【问题描述】:

我想在 Node.js 上的 mongoose 中存储大量数组。我想确保这些数组包含唯一的数字集合。这是我的架构:

var schema = new Schema({
    array: { type: [Number], unique: true, required: true }
});

它不起作用。例如,创建和保存几个新的数据库模型,它们有几个(我称之为唯一的)数组:

new Model({ array: [1,2] })
new Model({ array: [0,2] })

...导致这个:

E11000 duplicate key error index: test2.modes.$array_1  dup key: { : 1 }

..所以看起来 'unique' 正在检查这些数组中的每个索引的唯一性,而不是整个数组是否唯一。

还有其他方法可以一步完成吗?还是我必须在数据库上执行查找,比如在 schema.pre('save', fn) 内部,以检查数组是否唯一?

【问题讨论】:

  • 看起来不像。查看stackoverflow.com/questions/6743849/… 的可能骗局。
  • 是的,我确实看到了这个问题。再看一遍,我猜可能是在说同样的事情,但是对子文档(小猫)的引用让我感到困惑。 MongoDB 菜鸟。
  • 似乎是同一问题的复合变体。在更新数组时使用 $addToSet 运算符可能对您有用,具体取决于您的整体用例。
  • 数组本身将一成不变——一旦生成就不会改变。

标签: node.js mongodb schema unique mongoose


【解决方案1】:

好的,所以代替更好的方法,这就是我解决它的方法,使用保存钩子和额外的字符串:

var schema = new Schema({
    array: { type: [Number], required: true }
    _arraySignature: { type: String, unique: true }
});

schema.pre('save', function(next) {
    this._arraySignature = this.array.join('.');
    next();
});

...但我只能这样做,因为我知道我的数组将被排序,永远不会包含多个相同数字,并且是不可变的。有点难看。我很想知道是否有更好的方法。

【讨论】:

  • 我也很想知道是否有更好的方法
猜你喜欢
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2013-04-10
相关资源
最近更新 更多