23

क्रमबद्ध करें मुझे इस mongodb (mongoose) समस्या को हल करने में बहुत कठिनाई हो रही है।मोंगोस कुल परिणाम

इस स्कीमा 'अनुशंसा' (उपयोगकर्ता नाम, कमरा आईडी, ll और तारीख) है और इसके संग्रह में उपयोगकर्ता की सिफारिश है।

मुझे सबसे अधिक अनुशंसित कमरे (रूमआईडी द्वारा) की एक सूची प्राप्त करने की आवश्यकता है। नीचे स्कीमा और मोंगोज़ क्वेरी के साथ मेरा प्रयास समाधान है।

var recommendSchema = mongoose.Schema({ 
    username: String, 
    roomId: String, 
    ll: { type: { type: String }, coordinates: [ ] }, 
    date: Date 
}) 
recommendSchema.index({ ll: '2dsphere' }); 

var Recommend = mongoose.model('Recommend', recommendSchema); 
Recommend.aggregate(
     { 
      $group: 
      { 
       _id: '$roomId', 
       recommendCount: { $sum: 1 } 
      } 
     }, 
     function (err, res) { 
      if (err) return handleError(err); 
      var resultSet = res.sort({'recommendCount': 'desc'}); 

     } 
    ); 

उत्तर

47

समेकन पाइपलाइन से लौटाए गए परिणाम केवल साधारण वस्तुएं हैं। तो तुम नहीं एक अलग आपरेशन के रूप में, एक पाइप लाइन के मंच के रूप में छंटाई कार्य करें:

Recommend.aggregate(
    [ 
     // Grouping pipeline 
     { "$group": { 
      "_id": '$roomId', 
      "recommendCount": { "$sum": 1 } 
     }}, 
     // Sorting pipeline 
     { "$sort": { "recommendCount": -1 } }, 
     // Optionally limit results 
     { "$limit": 5 } 
    ], 
    function(err,result) { 

     // Result is an array of documents 
    } 
); 

तो वहाँ विभिन्न pipeline operators कि रूप में अच्छी तरह $group या $sort या $limit और अन्य चीजों के लिए इस्तेमाल किया जा सकता है। इन्हें किसी भी क्रम में, और जितनी बार आवश्यक हो सके प्रस्तुत किया जा सकता है। बस समझें कि एक "पाइपलाइन" चरण आगे बढ़ने के बाद परिणाम में बहता है।

संबंधित मुद्दे