我想在Node上以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'正在检查这些数组中的每个索引的唯一性,而不是整个数组是唯一的。
还有另一种方法可以一步完成吗?或者我必须在db上执行查找,比如在schema.pre('save',fn)中,检查数组是否唯一?
答案 0 :(得分:3)
好的,所以代替一个更好的方法,这是我解决它的方式,使用保存钩子和额外的字符串:
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();
});
...但我只能这样做,因为我知道我的数组将被排序,永远不会包含多个相同的数字,并且不可变。这有点难看。我很想知道是否有更好的方法。