2015-10-28 7 views
5

मैं MongoDB जानने के लिए शुरू करते हैं और मुझे लगता है कि जैसे दस्तावेज़ों के साथ काम:MongoDB के साथ सरणी के पहले तत्व द्वारा समूह कैसे करें?

{ 
    "_id" : ObjectId("562fac8a4f9ecec40f5b8ff9"), 
    "foo" : { 
     "objectid" : "39", 
     "stuff" : "65" 
    }, 
    "yearpublished" : [ 
     "1979" 
    ], 
    "bar": "1263" 
} 

yearpublished एक सरणी है और मैं समूह के लिए इस सरणी में पहली मूल्य के आधार पर अपने संग्रह की तरह तो संबंधित दस्तावेज़ों की मात्रा में गिना जाएगा ।

मैं पहले से ही इस क्वेरी किया:

db.foobar.aggregate(
    [ 
     { 
     $group : { 
      _id : '$yearpublished', 
      count: { $sum: 1 } 
     } 
     } 
    ] 
) 

और मिलती है:

{ 
    "result" : [ 
     { 
      "_id" : [ 
       "1923" 
      ], 
      "count" : 1.0000000000000000 
     }, 
     { 
      "_id" : [ 
       "1864" 
      ], 
      "count" : 1.0000000000000000 
     } 
} 

लेकिन मैं परिणाम के इस प्रकार के लिए देख रहा हूँ (यानी पहला तत्व केवल):

{ 
    "result" : [ 
     { 
      "_id" : "1923, 
      "count" : 1.0000000000000000 
     }, 
     { 
      "_id" : "1864", 
      "count" : 1.0000000000000000 
     } 
} 

मैंने सफलता के बिना _id : { $first: '$yearpublished.0' }, या _id : { $first: '$yearpublished[0]' }, की कोशिश की।

क्या आप जानते हैं कि मैं सरणी वर्ष के पहले तत्व द्वारा समूहित कर सकता हूं?

उत्तर

7

दुर्भाग्य से अभी यह करने के लिए एक ही रास्ता प्रसंस्करण $unwind के बाद सरणी से $first तत्व को निकालने के लिए है। तो बेशक आप $group करने के लिए फिर होगा:

db.foobar.aggregate([ 
    { "$unwind": "$yearpublished" }, 
    { "$group": { 
     "_id": "$_id", 
     "yearpublished": { "$first": "$yearpublished" } 
    }}, 
    { "$group": { 
     "_id": "$yearpublished", 
     "count": { "$sum": 1 } 
    }} 
]) 

केवल वर्तमान रास्ता तत्व "पहली" एक सरणी से प्राप्त करने के लिए यही है, यह deconstructing और ऑपरेटर का उपयोग प्रवेश पाने के लिए द्वारा।

भावी रिलीज़ $arrayElemAt होगा एक एकल चरण के भीतर सूचकांक करके ऐसा कर सकते हैं:

db.foobar.aggregate([ 
    { "$group": { 
     "_id": { "$arrayElemAt": [ "$yearpublished", 0 ] }, 
     "count": { "$sum": 1 } 
    }} 
]) 

लेकिन वर्तमान में एकत्रीकरण ढांचा इस तरह के मानक .find() के साथ "प्रक्षेपण" के रूप में "डॉट नोटेशन" सूचकांक उपयोग के साथ सौदा नहीं करता है करता है, और नहीं, इसलिए नए परिचालन।

+0

इस पूर्ण उत्तर के लिए बहुत बहुत धन्यवाद। – Alex

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