Menggunakan $
operator posisi, Anda bisa mendapatkan hasilnya. Namun, jika Anda memiliki beberapa elemen di vehicles
array semuanya akan dikembalikan dalam hasil, karena Anda hanya dapat menggunakan satu operator posisi dalam proyeksi dan Anda bekerja dengan 2 array (satu di dalam yang lain).
Saya sarankan Anda melihat aggregation framework
, karena Anda akan mendapatkan lebih banyak fleksibilitas. Berikut ini contoh kueri untuk pertanyaan Anda yang berjalan di shell. Saya tidak akrab dengan luwak, tapi saya rasa ini akan tetap membantu Anda dan Anda dapat menerjemahkannya:
db.collection.aggregate([
// Get only the documents where "email" equals "[email protected]" -- REPLACE with params.username
{"$match" : {email : "[email protected]"}},
// Unwind the "inventories" array
{"$unwind" : "$inventories"},
// Get only elements where "inventories.title" equals "activeInventory"
{"$match" : {"inventories.title":"activeInventory"}},
// Unwind the "vehicles" array
{"$unwind" : "$inventories.vehicles"},
// Filter by vehicle ID -- REPLACE with vehicleID
{"$match" : {"inventories.vehicles._id":ObjectId("53440e94c02b3cae81eb0069")}},
// Tidy up the output
{"$project" : {_id:0, vehicle:"$inventories.vehicles"}}
])
Ini adalah output yang akan Anda dapatkan:
{
"result" : [
{
"vehicle" : {
"_id" : ObjectId("53440e94c02b3cae81eb0069"),
"tags" : [
"vehicle"
],
"details" : [
{
"_id" : ObjectId("53440e94c02b3cae81eb0066"),
"year" : 2007,
"transmission" : "Manual",
"price" : 1000,
"model" : "Firecar",
"mileageReading" : 50000,
"make" : "Bentley",
"interiorColor" : "blue",
"history" : "CarProof",
"exteriorColor" : "blue",
"driveTrain" : "SWD",
"description" : "test vehicle",
"cylinders" : 4,
"mileageType" : "kms"
}
]
}
}
],
"ok" : 1
}