Baru-baru ini saya mulai menggunakan MongoDB dengan Mongoose di Nodejs.
Ketika saya menggunakan metode Model.find dengan $or
kondisi dan _id
bidang, Mongoose tidak berfungsi dengan baik.
Ini tidak bekerja:
User.find({
$or: [
{ '_id': param },
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Ngomong-ngomong, jika saya menghapus bagian '_id', ini TIDAK berhasil!
User.find({
$or: [
{ 'name': param },
{ 'nickname': param }
]
}, function(err, docs) {
if(!err) res.send(docs);
});
Dan di shell MongoDB, keduanya bekerja dengan baik.
const mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid(objectidtocheck)
Saya mohon semua orang untuk menggunakan bahasa dan janji pembuat kueri Mongoose alih-alih callback:
Baca lebih lanjut tentang Permintaan Mongoose .
sumber
Menurut dokumentasi mongoDB: "... Artinya, agar MongoDB menggunakan indeks untuk mengevaluasi $ atau ekspresi, semua klausa dalam $ or ekspresi harus didukung oleh indeks."
Jadi tambahkan indeks untuk bidang Anda yang lain dan itu akan berhasil. Saya memiliki masalah serupa dan ini menyelesaikannya.
Anda dapat membaca lebih lanjut di sini: https://docs.mongodb.com/manual/reference/operator/query/or/
sumber
sumber