Brug af $
positionsoperatør, kan du få resultaterne. Men hvis du har flere elementer i vehicles
array vil alle blive returneret i resultatet, da du kun kan bruge én positionsoperator i projektionen, og du arbejder med 2 arrays (den ene inde i den anden).
Jeg vil foreslå, at du tager et kig på aggregation framework
, da du får meget mere fleksibilitet. Her er et eksempel forespørgsel til dit spørgsmål, der kører i skallen. Jeg er ikke bekendt med mongoose, men jeg gætter på, at dette stadig vil hjælpe dig, og du vil være i stand til at oversætte det:
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"}}
])
Dette er outputtet, du får:
{
"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
}