Уникальные значения массива в Mongoose
В настоящее время завершаем Mongoose и MongoDB для моего проекта, но встречаем сегмент, где API не ясен.
У меня есть модель, содержащая несколько ключей и документов, и один из этих ключей os, называемый watchList
. Это массив идентификаторов, которые пользователь просматривает, но я должен быть уверен, что эти значения остаются уникальными.
Вот пример кода:
var MyObject = new Mongoose.Schema({
//....
watching : {type: Array, required: false},
//....
});
Итак, мой вопрос в том, как я могу убедиться, что значения, введенные в массив, только сохраняют один, поэтому, делая значения уникальными, могу ли я просто использовать unique: true
?
Спасибо
Ответы
Ответ 1
Насколько я знаю, единственный способ сделать это в мангусте - это назвать основного оператора Mongo (упомянутого danmactough). В мангусте это выглядело бы так:
var idToUpdate, theIdToAdd; /* set elsewhere */
Model.update({ _id: idToUpdate },
{ $addToSet: { theModelsArray: theIdToAdd } },
function(err) { /*...*/ }
);
Примечание: для этой функции требуется версия mongoose >= 2.2.2
Ответ 2
Взгляните на документацию Mongo на оператор $addToSet.
Ответ 3
Mongoose - это объектная модель для mongodb, поэтому одним из вариантов является рассмотрение документа как обычного объекта javascript.
MyModel.exec(function (err, model) {
if(model.watching.indexOf(watchId) !== -1) model.watching.push(watchId);
model.save(...callback);
});
Хотя, я согласен с тем, что мангуста должна иметь некоторую поддержку для этого, построенного в форме валидатора для функции ссылки на коллекцию документов - особенно потому, что большую часть времени вы хотите добавить только уникальные ссылки.