मुझे सभी websites मिलते हैं जो मेरे सरणी में मौजूद आईडी से मेल खाते हैं और नीचे के मामले में यह दो वेबसाइटें हैं। फिर मैं उन वेबसाइटों के प्रत्येक conversations सरणियों के अंदर देखना चाहता हूं और उन आईडी से मेल खाने वाली बातचीत के लिए conversations नामक एक अलग संग्रह खोजना चाहता हूं। मैं फिर उन वार्तालापों से कुछ/सभी क्षेत्रों को पकड़ना चाहता हूं और इसे पहले से मौजूद JSON दस्तावेज़ में जोड़ना चाहता हूं, उन्हें प्रत्येक वेबसाइट के भीतर वार्तालाप द्वारा समूहित करना। मैं कुल मिलाकर, आराम और समूह के साथ खेल रहा हूं, लेकिन काम करने के लिए कुछ भी नहीं मिल रहा है।

router.post('/staffLoadUpTwo', async (req, res) => {
  var userId = '5e8f964a9c2d0780c0163825';

  const company = await Company.findOne({ 'roles.admins': userId });
  var unwrappedCompany = JSON.parse(JSON.stringify(company));

  console.log(unwrappedCompany.websites);

  const website = await Website.find({
    _id: { $in: unwrappedCompany.websites },
  });

  // const unwindTest = await Website.aggregate([{$unwind : "$conversations"}]);

  console.log(website);
});

कंसोल.लॉग (वेबसाइट);

[ { conversations: [ '5e90d9ceb089812c9ba1a67b', '5e8f5a6a2582bf629998c3fd' ],
    _id: 5e949cc02483c0c0056a1a98,
    domain: 'http://x.com',
    __v: 0 },
  { conversations: [ '5e8e23595ce6d611cec5033f', '5e8e3afee8e95e1ff94650d3' ],
    _id: 5e949ce8f53450c0341b36cd,
    domain: 'http://y.com',
    __v: 0 } ]

आदर्श आउटपुट

[{
  _id: "5e949cc02483c0c0056a1a98",
  domain: 'http://x.com'
  conversations: [
    {conversationId: "5e90d9ceb089812c9ba1a67b", messages: {messageArray: ['a'], timeSent: 2}},
    {conversationId: "5e8f5a6a2582bf629998c3fd", messages: {messageArray: ['b'], timeSent: 6}}
]
}
  _id: "5e949ce8f53450c0341b36cd",
  domain: 'http://y.com'
  conversations: [
   {conversationId: "5e8e23595ce6d611cec5033f", messages: {messageArray: ['c'], timeSent: 1}},
   {conversationId: "5e8e3afee8e95e1ff94650d3", messages: {messageArray: ['d'], timeSent: 8}}
]
}]
0
Ryan Soderberg 14 अप्रैल 2020, 06:42

1 उत्तर

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

आपको मोंगोडीबी एकत्रीकरण के साथ खुद पर जोर देने की जरूरत नहीं है। चूंकि आप नेवला का उपयोग कर रहे हैं, आप प्रश्न में वर्णित परिणाम को प्राप्त करने के लिए आसानी से नेवला पॉप्युलेट का उपयोग कर सकते हैं।

बशर्ते आपने वेबसाइट योजना को कुछ इस तरह परिभाषित किया हो:

const websiteSchema = {
  // ...schema definition for other properties
  /* Note the ref property used below, the value must be the name of the
    conversation model, i.e the stringValue you passed into 
    mongoose.model(<stringValue>, conversationSchema); */
  conversations: [ { type: mongoose.Types.ObjectId, ref: 'Conversations' } ]
}

इस तरह एक नेवला क्वेरी:

const website = await Website.find({
    _id: { $in: unwrappedCompany.websites },
  }).populate('conversations');

वेबसाइट दस्तावेज़ों की एक सरणी आउटपुट करेगा जिनके वार्तालाप फ़ील्ड पॉप्युलेट हैं यानी, आपको वास्तविक वार्तालाप दस्तावेज़ मिलता है, न कि केवल उनके _ids।

Mongoose के बारे में अधिक यहां आबाद करें

1
Tunmee 15 अप्रैल 2020, 08:52