Mongoose中的独特阵列

时间:2012-03-23 10:11:27

标签: mongodb express mongoose

我发现可以这样做:

var someSchema = new Schema({
    myArray: [ObjectId], //array of ObjectIds
});

someSchema.index({myArray: 1}, {unique:true});

但是这段代码对我不起作用。所以基本上我要做的是创建一个组合的ObjectIds,以后可能不会重复。

例如:

If myArray is [val1, val2] 
Another document with myArray[val1, val2] or myArray[val2, val1] is not allowed
But of course myArray[val1, val3] is allowed, because it is another combination

- 感谢

3 个答案:

答案 0 :(得分:1)

MongoDB没有固有的索引类型,每个数组成员都需要唯一的值。

而是使用$addToSet更新运算符来确保只能添加​​每个ObjectID的一个副本。

答案 1 :(得分:0)

我认为使用索引来确保以这种方式保持唯一性的唯一方法是使用中间件来确保在保存数组之前对其进行排序,但这可能不适合您的用例。

如果这适合您,您需要执行以下操作:

someSchema.pre('save', function(next){
  this.myArray.sort();
  next();
});

答案 2 :(得分:0)

有一种方法可以创建数组的哈希并使其唯一。

A.e。

var someSchema = new Schema({
   myArray: [ObjectId], //array of ObjectIds
   hash: {type: string, unique: true} 
});

然后

someSchema.pre('save', function(next){
  this.myArray.sort();
  this.hash = this.myArray.toString(); // Simple way. You should use something more practical
  next();
});