Привет,
Как я могу удалить ObjectId из массива ObjectId?
Моя модель:
var User = new Schema({
title : { type : String, index: true },
name : String,
friends : [ObjectId],
join_at : {type:Date, default:Date.now },
save_at : {type:Date, default:Date.now }
});
Функция удаления objectId: uid
User.findOne({'_id' : self.id}, function(err, me){
for(var i=0; i<=me.friends.length; i++){
if (String(me.friends[i])==String(uid)){
me.friends.splice(i, 1);
break;
}
}
me.save(function(err,us){
next(err,'kljlmjk'+JSON.stringify(me));
});
});
Спасибо за ваш ответ.
Не используйте сплайсинг.
me.friends.remove(uid);
me.save(callback);
Эта функция прекрасна!
Есть ли способ сделать это для нескольких документов следующим образом?
User.update({
friends: uid
}, {
'$pull': {
friends: uid
}
})
Ищите ответ на этот же вопрос (выше). Как это сделать для нескольких документов?
@jhickner попробуй $pullAll
. http://docs.mongodb.org/manual/reference/operator/update/pullAll/
чудесно
@bnoguchi Привет, я знаю, что это старая тема, но это первое сообщение в Google (и я нашел здесь решение).
Просто быстрый вопрос, однако, для полноты картины. Какое использование предпочтительнее:
me.friend.remove(uid);
me.save(callback);
Или:
me.friends.pull(uid);
me.save(callback);
Кроме того, есть ли более правильный способ вставки новых «друзей» вместо (короче говоря, лучшая альтернатива push() ):
me.friend.push(uid);
me.save(callback);
Спасибо.
Re: первый вопрос, без разницы, на ваше усмотрение
Re: 2-й вопрос, лучше каким образом?
Как-бы эффективнее/быстрее.
Кроме того, я заметил, что у .pop(...) могут быть проблемы при очистке массива, выдаче поля «невозможно сохранить неопределенное» после вызова функции me.save(callback), в то время как remove() работает нормально - поэтому я и спрашиваю.
Нет, push()
должно быть настолько быстрым, насколько это возможно при использовании save()
. Вы также можете сделать me.update({}, { $push: { friend: uid } }).then()
, что будет немного быстрее за счет обхода промежуточного программного обеспечения, проверки и т. д., но это не улучшит общую задержку слишком сильно.
Re: проблемы pop()
, не могли бы вы открыть отдельную проблему с трассировкой стека и скриптом, который воспроизводит эту проблему, пожалуйста?
Самый полезный комментарий
Не используйте сплайсинг.