Mongoose: Hapus dari array[ObjectId]

Dibuat pada 24 Mei 2011  ·  10Komentar  ·  Sumber: Automattic/mongoose

Halo,

Bagaimana saya bisa menghapus ObjectId dari array ObjectId ?

Model saya :

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

Fungsi untuk menghapus 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));
    });     
});                                     

Terimakasih atas tanggapan Anda.

Komentar yang paling membantu

Jangan gunakan sambungan.

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

Semua 10 komentar

Jangan gunakan sambungan.

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

Fungsi itu indah!

Apakah ada cara untuk melakukan ini pada banyak dokumen sebagai berikut?

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

Mencari jawaban untuk pertanyaan yang sama (di atas). Bagaimana Anda melakukan ini untuk banyak dokumen?

luar biasa

@bnoguchi Hai, saya tahu ini adalah utas lama, tetapi ini adalah posting pertama di google (dan saya memang menemukan solusi di sini).
Hanya pertanyaan singkat, demi kelengkapan. Penggunaan mana yang lebih disukai:

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

Atau:

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

Juga, apakah ada cara yang lebih benar untuk memasukkan "teman" baru daripada (singkatnya, alternatif yang lebih baik untuk Push() ):

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

Terima kasih.

Re: pertanyaan pertama, tidak masalah, terserah preferensi pribadi

Re: pertanyaan ke-2, lebih baik dalam hal apa?

As-in lebih efisien/cepat.
Juga, saya perhatikan bahwa .pop(...) dapat memiliki masalah saat mengosongkan array, melempar bidang "tidak dapat menyimpan tidak terdefinisi" setelah memanggil fungsi me.save(callback), sementara remove() berfungsi dengan baik - maka saya bertanya.

Tidak, push() harus secepat yang Anda bisa saat masih menggunakan save() . Anda juga dapat melakukan me.update({}, { $push: { friend: uid } }).then() , yang akan sedikit lebih cepat dengan melewati middleware, validasi, dll. tetapi itu tidak akan meningkatkan latensi keseluruhan terlalu banyak.

Re: masalah pop() , dapatkah Anda membuka masalah terpisah dengan jejak tumpukan dan skrip yang mereproduksi masalah ini?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat