6

आईएएम स्पैगोबी के तहत ग्रोवी स्क्रिप्टिंग का उपयोग कर। मैं एकत्रीकरण का उपयोग करना चाहता हूँ। मैं चाहता हूँ उदाहरण निम्नलिखित एकत्रीकरण पर अमल करने के लिए:मोंगो डीबी: ग्रोवी भाषा का उपयोग करके एकत्रीकरण

db.myCollection.aggregate(
    [ 
     { 
     $group : { 
      _id : { day: { $dayOfMonth: "$recvTime" } } 

     } 
     } 
    ] 
) 

मैंने कोशिश की:

An unexpected error occured while executing dataset: { "serverUsed" : "192.168.1.160:27017" , "errmsg" : "exception: invalid operator '$project'" , "code" : 15999 , "ok" : 0.0} 

कोई भी विचार:

DBObject projectFields = new BasicDBObject('$dayOfMonth',"recvTime"); 
DBObject project=new BasicDBObject('$project',projectFields) 

DBObject groupFields = new BasicDBObject("_id",project); 

DBObject group = new BasicDBObject('$group', groupFields); 

iterable = db.getCollection('myCollection').aggregate(group) 

मैं यह त्रुटि मिल गया?

अपडेट: क्वेरी मोंगो में मार डाला

db['cygnus_/kurapath_enocean_power_enocean'].aggregate(
... [ 
...  { 
...   $group : { 
...   _id : { day: { $dayOfMonth: "$recvTime" } } 
...   } 
...  } 
... ] 
...); 
{ "_id" : { "day" : 9 } } 
{ "_id" : { "day" : 8 } } 
{ "_id" : { "day" : 7 } } 
{ "_id" : { "day" : 4 } } 
{ "_id" : { "day" : 3 } } 

मोंगो DB में संग्रहीत डेटा शैल:

db['cygnus_/kurapath_enocean_power_enocean'].find() 
{ "_id" : ObjectId("55e81e9631d7791085668331"), "recvTime" : ISODate("2015-09-03T10:19:02Z"), "attrName" : "power", "attrType" : "string", "attrValue" : "2085.0" } 
{ "_id" : ObjectId("55e81e9631d7791085668332"), "recvTime" : ISODate("2015-09-03T10:19:02Z"), "attrName" : "power", "attrType" : "string", "attrValue" : "2085.0" } 
{ "_id" : ObjectId("55e81e9831d7791085668333"), "recvTime" : ISODate("2015-09-03T10:19:04Z"), "attrName" : "power", "attrType" : "string", "attrValue" : "2077.0" } 

उत्तर

1

त्रुटि से, एकत्रीकरण की उम्मीद नहीं है $project ऑपरेटर ताकि आप वास्तविक पाइपलाइन अभिव्यक्तियों को दिखाने के लिए projectFields और project चर बदलना चाहिए यानी

जावा में अपने कोड प्रकार क्वेरी की एक डाटासेट का उपयोग करें और जे एस भाषा 2) का उपयोग प्रकार जावा वर्ग की एक डाटासेट का उपयोग करें) 1 और लिखें:
DBObject dateFields = new BasicDBObject("$dayOfMonth", "$recvTime"); 
DBObject dateObject = new BasicDBObject("day", dateFields); 

DBObject groupFields = new BasicDBObject("_id", dateObject); 
DBObject group = new BasicDBObject('$group', groupFields); 

iterable = db.getCollection('myCollection').aggregate(group); 
+0

मैंने आपके कोड की कोशिश की लेकिन मुझे एक नई त्रुटि मिली :(: 'डेटासेट निष्पादित करते समय एक अनपेक्षित त्रुटि हुई: ऐसी कोई संपत्ति नहीं: दिन के लिए ओफमोन्थ: स्क्रिप्ट 11 9' जब मैंने 'DBObject dateFields = new BasicDBObject ('$ dayOfMonth'," recvTime ");' मुझे ' डेटासेट निष्पादित करते समय एक अनपेक्षित त्रुटि आई: {" serverUsed ":" 192.168.1.160:27017 "," errmsg ":" अपवाद: बीएसओएन प्रकार स्ट्रिंग से तारीख में परिवर्तित नहीं हो सकता "," कोड ": 16006," ठीक है ": 0.0}' – sabrina2020

+0

आप अपने '" रिकॉटाइम "फ़ील्ड में '$' शामिल करना भूल गए हैं, इसलिए अपनी लाइन' डीबीओबीजेक्ट डेटफिल्ड्स = नया बेसिक डीबीबीब्जेक्ट ('$ डेऑफ मॉन्थ', "रिकवटाइम") 'डीबीओबीजेक्ट डेटफिल्ड्स =' नया बेसिक डीबीबीब्जेक्ट ('$ dayOfMonth' ', "$ recvTime") '। – chridam

+0

मैंने कोड को 'DBObject dateFields = new BasicDBObject (' $ dayOfMonth ', "$ recvTime") में अपडेट किया है, लेकिन मुझे यह त्रुटि मिली है' डेटासेट निष्पादित करते समय एक अनपेक्षित त्रुटि हुई: ऐसी कोई संपत्ति नहीं: कक्षा के लिए recvTime ', अगर मैंने अपडेट किया 'DBObject dateFields = new BasicDBObject ('$ dayOfMonth', '$ recvTime'); 'मुझे एक खाली परिणाम सेट मिला है – sabrina2020

0

SpagoBI में आप प्रकार MongoDB की एक डाटासेट बनाने के लिए 2 तरीके हैं समाधान 1 आप प्रकार क्वेरी की एक डाटासेट बनाने चाहिए के लिए, एक डेटा स्रोत MongoDB का चयन करें और क्षेत्र QUERY पर विनिर्देश यहाँ लिखा निम्नलिखित js में क्वेरी लिखना (http://wiki.spagobi.org/xwiki/bin/view/spagobi_server/data_set#HQueryDataSet28Mongo29)

बटन "संपादित स्क्रिप्ट" क्वेरी को संशोधित करने के लिए किया जाता है स्ट्रिंग और आप विकी में कुछ टिप पा सकते हैं। तो अगर क्वेरी एसक्यूएल है आप क्वेरी स्ट्रिंग को बदलने के लिए एक js ओ ग्रूवी स्क्रिप्ट का उपयोग कर सकते हैं

आप इस तरह से आपकी क्वेरी व्यक्त कर सकते हैं (उदाहरण के लिए पैरामीटर या तालिका नाम बनाने के लिए कुछ तर्क लागू):

Var query = db.myCollection.aggregate(
    [ 
     { 
     $group : { 
      _id : { day: { $dayOfMonth: "$recvTime" } } 

     } 
     } 
    ] 
) 
संबंधित मुद्दे