2012-03-23 94 views
0

我發現,它可以這樣做:獨特的數組中貓鼬

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

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

但此代碼不是爲我工作。所以基本上我試圖做的是創建ObjectID的組合,以後可能不會被複制。

例如:

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 

- 由於

回答

1

MongoDB的不具有一種天生的索引類型,這將需要在每個陣列成員的唯一值。

而是使用$addToSet更新運算符來確保每個ObjectID只能添加一個副本。

0

我相信唯一可以使用索引來確保唯一性的方法是使用中間件來確保數組在保存之前已經排序,但這可能不適合您的用例。

如果適合你,你需要做這樣的事情:

someSchema.pre('save', function(next){ 
    this.myArray.sort(); 
    next(); 
}); 
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(); 
});