Уникальный массив в мангусте - PullRequest
0 голосов
/ 23 марта 2012

Я обнаружил, что это можно сделать так:

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 ]

1 голос
/ 23 марта 2012

MongoDB не имеет врожденного типа индекса, который будет требовать уникальных значений в каждом элементе массива.

Вместо этого используйте оператор обновления $ addToSet , чтобы обеспечить добавление только одной копии каждого ObjectID.

0 голосов
/ 17 января 2014

Существует один способ создать хэш массива и сделать его уникальным.

Ae

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();
});
0 голосов
/ 23 марта 2012

Я полагаю, что единственный способ, которым вы могли бы использовать индекс для обеспечения уникальности таким способом, - это использовать промежуточное программное обеспечение, обеспечивающее упорядочение массива перед его сохранением, но это может не соответствовать вашему сценарию использования.1002 * Если это вас устраивает, вам нужно сделать что-то вроде:

someSchema.pre('save', function(next){
  this.myArray.sort();
  next();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...