$
を使用する
位置演算子、あなたは結果を得ることができます。ただし、vehicles
に複数の要素がある場合 射影で使用できる位置演算子は1つだけであり、2つの配列(1つは別の配列内)で作業しているため、それらすべての配列が結果に返されます。
aggregation framework
をご覧になることをお勧めします。
、より多くの柔軟性が得られるため。シェルで実行される質問のクエリ例を次に示します。私はマングースに精通していませんが、これはまだあなたを助け、あなたはそれを翻訳することができると思います:
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
}