Mongoose: Удалить из массива[ObjectId]

Созданный на 24 мая 2011  ·  10Комментарии  ·  Источник: Automattic/mongoose

Привет,

Как я могу удалить 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);

Все 10 Комментарий

Не используйте сплайсинг.

me.friends.remove(uid);
me.save(callback);

Эта функция прекрасна!

Есть ли способ сделать это для нескольких документов следующим образом?

User.update({
    friends: uid
}, {
    '$pull': {
        friends: uid
    }
})

Ищите ответ на этот же вопрос (выше). Как это сделать для нескольких документов?

чудесно

@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() , не могли бы вы открыть отдельную проблему с трассировкой стека и скриптом, который воспроизводит эту проблему, пожалуйста?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги