Mongoose: Quitar de la matriz[ObjectId]

Creado en 24 may. 2011  ·  10Comentarios  ·  Fuente: Automattic/mongoose

Hola,

¿Cómo puedo eliminar un ObjectId de una matriz de ObjectId?

Mi modelo :

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 }
});

La función para eliminar el 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));
    });     
});                                     

Gracias por su respuesta.

Comentario más útil

No use empalme.

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

Todos 10 comentarios

No use empalme.

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

Esa función es hermosa!

¿Hay alguna manera de hacer esto en varios documentos de la siguiente manera?

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

Buscando una respuesta a esta misma pregunta (arriba). ¿Cómo se hace esto para varios documentos?

maravilloso

@bnoguchi Hola, sé que este es un hilo antiguo, pero es la primera publicación en Google (y encontré una solución aquí).
Sin embargo, solo una pregunta rápida, para completar. Qué uso se prefiere:

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

O:

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

Además, ¿hay alguna forma más correcta de insertar nuevos "amigos" en lugar de (en resumen, una mejor alternativa para push() ):

me.friend.push(uid);
me.save(callback);

Gracias.

Re: primera pregunta, no importa, según preferencia personal

Re: 2da pregunta, mejor de que manera?

Como-en más eficiente/más rápido.
Además, me di cuenta de que .pop(...) puede tener problemas al vaciar una matriz, lanzando el campo "no se puede guardar undefined" después de llamar a la función me.save(callback), mientras que remove() funciona bien, de ahí que pregunte.

No, push() debería ser lo más rápido posible sin dejar de usar save() . También puede hacer me.update({}, { $push: { friend: uid } }).then() , que será un poco más rápido al pasar por alto el middleware, la validación, etc., pero no mejorará demasiado la latencia general.

Re: los problemas de pop() , ¿puede abrir un problema separado con un seguimiento de la pila y un script que reproduzca este problema, por favor?

¿Fue útil esta página
0 / 5 - 0 calificaciones