Jika saya memiliki skema ini ...
person = {
name : String,
favoriteFoods : Array
}
... di mana favoriteFoods
array diisi dengan string. Bagaimana saya bisa menemukan semua orang yang menggunakan "sushi" sebagai makanan favorit mereka menggunakan luwak?
Saya berharap sesuatu seperti:
PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});
(Saya tahu bahwa tidak ada $contains
dalam mongodb, hanya menjelaskan apa yang saya harapkan sebelum mengetahui solusinya)
favouriteFoods
:favouriteFoods:[{type:Schema.Types.ObjectId, ref:'Food'}]
PersonModel.find({ favouriteFoods.text: "sushi" }, ...); person = { name : String, favouriteFoods : [{text:String}] }
Tidak ada
$contains
operator di mongodb.Anda dapat menggunakan jawaban dari JohnnyHK karena berfungsi. Analogi terdekat yang mengandung mongo adalah
$in
, menggunakan kueri Anda akan terlihat seperti:sumber
$in
digunakan ketika Anda memiliki beberapa nilai kueri dan dokumen harus cocok dengan salah satunya. Untuk kebalikannya (yang merupakan pertanyaan ini), jawaban JohnnyHK benar. Saya akan mengundurkan diri tetapi saya kira jawaban ini mungkin bermanfaat bagi orang lain yang berakhir di halaman ini.PersonModel.find({favouriteFoods: {"$in": ["sushi", "hotdog"]}})
Saya merasa
$all
akan lebih cocok dalam situasi ini. Jika Anda mencari orang yang suka sushi, Anda lakukan:Karena Anda mungkin ingin memfilter lebih banyak pencarian Anda, seperti:
$in
seperti ATAU dan$all
seperti DAN. Periksa ini: https://docs.mongodb.com/manual/reference/operator/query/all/sumber
Dalam hal array berisi objek misalnya jika
favouriteFoods
array objek berikut ini:Anda dapat menggunakan kueri berikut:
sumber
Jika Anda perlu menemukan dokumen yang berisi elemen NULL di dalam array sub-dokumen, saya telah menemukan kueri ini yang bekerja dengan cukup baik:
Kueri ini diambil dari posting ini: Array kueri MongoDb dengan nilai nol
Itu adalah penemuan yang hebat dan bekerja jauh lebih baik daripada versi awal dan salah saya sendiri (yang ternyata berfungsi dengan baik hanya untuk array dengan satu elemen):
sumber
Meskipun setuju dengan find () paling efektif di usecase Anda. Masih ada $ match of aggregation framework, untuk mempermudah permintaan sejumlah besar entri dan menghasilkan sejumlah kecil hasil yang menyimpan nilai bagi Anda terutama untuk mengelompokkan dan membuat file baru.
sumber
Memetikan lookup_food_array adalah array.
Memetikan lookup_food_array adalah string.
sumber
Untuk Loopback3 semua contoh yang diberikan tidak bekerja untuk saya, atau secepat menggunakan REST API. Tetapi itu membantu saya menemukan jawaban tepat yang saya butuhkan.
{"where":{"arrayAttribute":{ "all" :[String]}}}
sumber
Jika Anda ingin menggunakan sesuatu seperti operator "berisi" melalui javascript, Anda selalu dapat menggunakan ekspresi Reguler untuk itu ...
misalnya. Katakanlah Anda ingin mengambil pelanggan yang memiliki "Bartolomew" sebagai nama
sumber
Saya tahu topik ini sudah tua, tetapi untuk orang-orang masa depan yang dapat bertanya-tanya pertanyaan yang sama, solusi lain yang sangat tidak efisien adalah dengan:
Ini menghindari semua optimisasi oleh MongoDB jadi jangan gunakan dalam kode produksi.
sumber