Korzystanie z $
operator pozycyjny, możesz uzyskać wyniki. Jeśli jednak masz wiele elementów w vehicles
tablica wszystkie z nich zostaną zwrócone w wyniku, ponieważ możesz użyć tylko jednego operatora pozycyjnego w rzucie i pracujesz z 2 tablicami (jedna wewnątrz drugiej).
Proponuję zapoznać się z aggregation framework
, ponieważ uzyskasz znacznie większą elastyczność. Oto przykładowe zapytanie dla Twojego pytania, które działa w powłoce. Nie znam mangusty, ale myślę, że to nadal ci pomoże i będziesz w stanie to przetłumaczyć:
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"}}
])
Oto wynik, który otrzymasz:
{
"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
}