Pomocí $
poziční operátor, můžete získat výsledky. Pokud však máte ve vehicles
více prvků pole všechny budou ve výsledku vráceny, protože v projekci můžete použít pouze jeden poziční operátor a pracujete se 2 poli (jedno uvnitř druhého).
Navrhoval bych, abyste se podívali na aggregation framework
, protože získáte mnohem větší flexibilitu. Zde je příklad dotazu pro vaši otázku, který běží v shellu. V mangustách se nevyznám, ale myslím, že vám to stále pomůže a mohli byste to přeložit:
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"}}
])
Toto je výstup, který získáte:
{
"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
}