Подтвердить что ты не робот

Уникальные значения массива в Mongoose

В настоящее время завершаем Mongoose и MongoDB для моего проекта, но встречаем сегмент, где API не ясен.

У меня есть модель, содержащая несколько ключей и документов, и один из этих ключей os, называемый watchList. Это массив идентификаторов, которые пользователь просматривает, но я должен быть уверен, что эти значения остаются уникальными.

Вот пример кода:

var MyObject = new Mongoose.Schema({
    //....
    watching : {type: Array, required: false},
    //....
});

Итак, мой вопрос в том, как я могу убедиться, что значения, введенные в массив, только сохраняют один, поэтому, делая значения уникальными, могу ли я просто использовать unique: true?

Спасибо

4b9b3361

Ответ 1

Насколько я знаю, единственный способ сделать это в мангусте - это назвать основного оператора Mongo (упомянутого danmactough). В мангусте это выглядело бы так:

var idToUpdate, theIdToAdd; /* set elsewhere */
Model.update({ _id: idToUpdate }, 
             { $addToSet: { theModelsArray: theIdToAdd } }, 
             function(err) { /*...*/ }
);

Примечание: для этой функции требуется версия mongoose >= 2.2.2

Ответ 3

Mongoose - это объектная модель для mongodb, поэтому одним из вариантов является рассмотрение документа как обычного объекта javascript.

MyModel.exec(function (err, model) {
   if(model.watching.indexOf(watchId) !== -1) model.watching.push(watchId);

   model.save(...callback);
});

Хотя, я согласен с тем, что мангуста должна иметь некоторую поддержку для этого, построенного в форме валидатора для функции ссылки на коллекцию документов - особенно потому, что большую часть времени вы хотите добавить только уникальные ссылки.