Уникальные значения массива в Mongoose - PullRequest
12 голосов
/ 10 марта 2012

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

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

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

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

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

Спасибо

Ответы [ 3 ]

14 голосов
/ 12 марта 2012

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

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

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

6 голосов
/ 10 марта 2012

Посмотрите документацию Mongo об операторе $ addToSet .

1 голос
/ 10 марта 2014

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

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

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

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

...