Използване на $
позиционен оператор, можете да получите резултатите. Ако обаче имате няколко елемента в vehicles
всички те ще бъдат върнати в резултата, тъй като можете да използвате само един позиционен оператор в проекцията и работите с 2 масива (един в друг).
Предлагам ви да разгледате aggregation framework
, тъй като ще получите много повече гъвкавост. Ето примерна заявка за вашия въпрос, която се изпълнява в обвивката. Не съм запознат с mongoose, но предполагам, че това ще ви помогне и ще можете да го преведете:
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"}}
])
Това е резултатът, който ще получите:
{
"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
}