मैं node.js 8.11.1 पर mongoDB 3.6 का उपयोग कर रहा हूं और MongoDB Node.js ड्राइवर के साथ काम कर रहा हूं। मेरे पास दो संग्रह हैं, 'समूह' और 'उपयोगकर्ता':

group:
[  
   {  
      "_id":1,
      "groupName":"group1",
      "users":[  
         {  
            "userId":1,
            "isAdmin":"false"
         },
         {  
            "userId":2,
            "isAdmin":"true"
         }
      ]
   },
   {  
      "_id":2,
      "groupName":"group2",
      "users":[  
         {  
            "userId":2,
            "isAdmin":"false"
         },
         {  
            "userId":3,
            "isAdmin":"true"
         }
      ]
   }
]

user:
[  
   {  
      "_id":1,
      "username":"user1",
      "firstname":"a",
      "lastname":"aa",
      "mobileNo":"+1111111"
   },
   {  
      "_id":2,
      "username":"user2",
      "firstname":"b",
      "lastname":"bb",
      "mobileNo":"+2222222"
   },
   {  
      "_id":3,
      "username":"user3",
      "firstname":"c",
      "lastname":"cc",
      "mobileNo":"+3333333"
   }
]

मुझे इस तरह कुछ वापस करने के लिए कुल मिलाकर चाहिए:

[  
   {  
      "_id":1,
      "groupName":"group1",
      "members":[  
         {  
            "isAdmin":"false",
            "username":"user1",
            "firstname":"a",
            "lastname":"aa"
         },
         {  
            "isAdmin":"true",
            "username":"user2",
            "firstname":"b",
            "lastname":"bb"
         }
      ]
   },
   {  
      "_id":2,
      "groupName":"group2",
      "members":[  
         {  
            "isAdmin":"false",
            "username":"user2",
            "firstname":"b",
            "lastname":"bb"
         },
         {  
            "isAdmin":"true",
            "username":"user3",
            "firstname":"c",
            "lastname":"cc"
         }
      ]
   }
]

परिणाम में "सदस्यों" पर, समूह संग्रह में "उपयोगकर्ताओं" से "isAdmin" वापसी और उपयोगकर्ता संग्रह से "उपयोगकर्ता नाम", "प्रथम नाम" और "अंतिम नाम" आया

बहुत धन्यवाद,

मिलाद।

2
Milad Aghamohammadi 17 सितंबर 2018, 11:11

1 उत्तर

सबसे बढ़िया उत्तर

आप mongodb 3.6 और इसके बाद के संस्करण से नीचे एकत्रीकरण का प्रयास कर सकते हैं

db.group.aggregate([
  { "$unwind": "$users" },
  { "$lookup": {
    "from": Users.collection.name,
    "let": { "userId": "$users.userId", "isAdmin": "$users.isAdmin" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$_id", "$$userId" ] } } },
      { "$project": { "isAdmin": "$$isAdmin", "username": 1, "firstName": 1, "lastName": 1 }}
    ],
    "as": "members"
  }},
  { "$unwind": "$members" },
  { "$group": {
    "_id": "$_id",
    "members": { "$push": "$members" },
    "groupName": { "$first": "$groupName" }
  }}
])
1
Ashh 17 सितंबर 2018, 13:56