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.
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?
@jhickner coba $pullAll
. http://docs.mongodb.org/manual/reference/operator/update/pullAll/
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?
Komentar yang paling membantu
Jangan gunakan sambungan.