Ketika saya mencoba untuk mengubah bagian mana pun dari data yang dikembalikan oleh Mongoose Query itu tidak berpengaruh.
Saya mencoba memikirkan hal ini selama sekitar 2 jam kemarin, dengan semua jenis _.clone()
, menggunakan variabel penyimpanan sementara, dll. Akhirnya, ketika saya merasa gila, saya menemukan solusi. Jadi saya pikir seseorang di masa depan (fyuuuture!) Mungkin memiliki masalah penyimpanan.
Survey.findById(req.params.id, function(err, data){
var len = data.survey_questions.length;
var counter = 0;
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q; //has no effect
if(++counter == len) {
res.send(data);
}
});
});
});
Jawaban:
Untuk kasus seperti ini di mana Anda menginginkan objek JS biasa daripada contoh model lengkap, Anda dapat memanggil
lean()
rantai kueri seperti ini:Cara
data
ini sudah menjadi objek JS biasa yang dapat Anda manipulasi sesuai kebutuhan.sumber
aggregate
selalu memberikan hasil sebagai objek biasa, jadi tidak perlulean()
.Saya pikir dokumentasi Mongoose tidak membuat ini cukup jelas, tetapi data yang dikembalikan dalam kueri (meskipun Anda dapat res.send () itu) sebenarnya adalah objek Dokumen Mongoose, dan BUKAN objek JSON. Tetapi Anda dapat memperbaikinya dengan satu baris ...
sumber
toObject()
, yang melakukan hal yang samatoJSON()
tetapi dengan nama yang tidak terlalu membingungkan.TypeError: data.toObject is not a function
Saya mendapatkan ini, sama dengantoJSON
result
, saya bisa memodifikasiresult._doc
.JSON.parse(JSON.stringify(data))
sebagai gantinya untuk Array objek