मैं उन गुणों को कैसे कह सकता हूं जो एक उप संग्रह में दूसरे संग्रह में हैं?
Nov 26 2020
मेरे पास 2 संग्रह हैं: एक को बुलाया places
और type_places
। a place
ने एक प्रकार के स्थान को संबद्ध किया है ( type_places
) और इससे कुछ वस्तुएं ( objects
सरणी) जुड़ी हो सकती हैं ।
type_places
{
"_id": "5fbc7cc705253c2da482023f",
"type_place": "office",
"objects": [
{
"_id": "5fbc7cc705253c2da48202saw",
"name": "chair"
},
{
"_id": "5fbc7cc705253c2da4820242",
"name": "table"
},
{
"_id": "5fbc7cc705253c2da482025f",
"name": "desktop"
}
]
}
places
{
"_id": "5fbc7cc705253c2da482025f",
"place": "Room 5",
"type_place_id": "5fbc7cc705253c2da482023f", /*"office"*/
"type_place_objects": [
{
"_id": "5fbc7cc705253c2da48202saw", /*chair*/
"quantify": 4
},
{
"_id": "5fbc7cc705253c2da482025f", /*desktop*/
"quantify": 2
}
]
}
तब मैं चाहता हूं कि जब मैं क्वेरी करता हूं place
, तो क्वेरी मुझे दिखाती है place
कि मुझे परामर्श दिया गया है, यह किस तरह का है ( type_place
) और objects
उस स्थान का किस प्रकार का है
उत्पादन वांछित:
{
"_id": "5fbc7cc705253c2da482023f",
"place": "Room 5",
"type_place_objects": [
{
"_id": "5fbc7cc705253c2da48202saw",
"name": "chair",
"quantify": 4
},
{
"_id": "5fbc7cc705253c2da482025f",
"name": "desktop",
"quantify": 2
}
]
}
मैं यह कोशिश कर रहा हूँ, लेकिन काम नहीं कर रहा:
place.aggregate(
[
{
"$match": {"place":"Room 5"} }, { "$lookup": {
"from": "type_place",
"localField": "type_place_id",
"foreignField": "_id",
"as": "type_place_objects"
}
},
{
"$sort": { "_id": -1 } }, { "$project": {
"_id":1,
"place":1,
"type_place_objects": 1
}
}
])
इसे कैसे ठीक कर सकते हैं?
जवाब
1 varman Nov 27 2020 at 07:55
कई तरीके हो सकते हैं, एक तरीके का उपयोग कर रहे हैं $lookup
जैसा कि आप पहले से ही कोशिश कर रहे हैं
db.place.aggregate([
{ "$match": { "place": "Room 5" } },
{ $unwind: "$type_place_objects" },
{
"$lookup": { "from": "type_place", "let": { tpo: "$type_place_objects._id" },
"pipeline": [
{ $unwind: "$objects" },
{
$match: { $expr: {
$eq: [ "$objects._id", "$$tpo" ] } } } ], "as": "join" } }, { $addFields: {
"join": { "$arrayElemAt": [ "$join", 0]
}
}
},
{
$addFields: { "type_place_objects.name": "$join.objects.name" }
},
{
$group: { _id: "$_id",
place: { $first: "$place" },
type_place_objects: { "$addToSet": "$type_place_objects" }
}
}
])
कार्य मानगो खेल का मैदान