1. BasicDbObject
يتمثل استعلام التجميع بأكمله في حساب عدد المستخدمين في مختلف حالات المستخدمين كسيناريوهات:
1. معايير التصفية:
التاريخ هو تاريخ الاستعلام:
BasicDbObject Query = New BasicDbobject () ؛ Query.put ("time" ، new BasicDbobject ("$ gte" ، date + "00:00:00") .Append ("$ lte" ، date + "23:59:59")) ؛إذا كانت هناك شروط متعددة: إضافة Query.put ("الحالة" ، 0) ؛
إذا كان هناك أو مرشح:
قيم BasicDblist = new BasicDblist () ؛ القيم. add (new basicdbobject ("الحالة" ، new BasicDbobject ("$ arexists" ، false))) ؛ القيم. add (new basicdbobject ("الحالة" ، 0)) ؛ query.put ("$ أو" ، القيم) ؛عندما تعني New BasicDboBject ("$ موجود" ، خطأ)) أن "الحالة" غير موجودة (لا يمكن أن يكون مستند MongoDB مساويًا لحقل الكيان)
2. تطابق الربط
DbObject Match = New BasicDbobject ("$ match" ، Query) ؛ضع الاستعلام السابق في مرشح Macth
3. الربط والتجمع ظروف
هذه الخطوة تعادل مجموعة SQL بواسطة
BasicDbObject GroupBy = New BasicDbobject () ؛ // ظروف التجميع groupby.put ("userId" ، "$ userId") ؛ // Group وفقًا لمعرف المستخدممثل خطوة التصفية في الخطوة الأولى ، إذا كانت هناك مجموعات متعددة ، يمكنك إضافتها مباشرة إلى ما يلي: groupby.put ("الحالة" ، "$ status") ؛
4. استعلام ما بعد المجموعة
أول لصق المجموعات:
dbObject select = new basicdbobject ("_ id" ، groupby) ؛إذا أردنا العمل على البيانات المجمعة: (هنا هي إحصائيات المستخدمين)
select.put ("count" ، new BasicDbobject ("$ sum" ، 1)) ؛5. لصق مجموعة $
DbObject Group = New BasicDbobject ("$ group" ، SELECT) ؛حتى الآن. دعونا نقص على انتهاء بيان mongodb هنا
لنبدأ عملية الاستعلام:
استيراد com.mongodb.aggregationoutput ؛ استيراد org.springframework.data.mongodb.core.mongotemplate ؛ aggregationoutputpput = mongotemplate.getCollection ("هنا اسم جدول البيانات من mongodb").اقرأ نتيجة الاستعلام:
itervable <DbObject> map = output.results () ؛ // transip mapfor (dbObject dbObject: map) {// map read هنا {"_id": {"userid": 1 ، "status" 0}} ... map <string ، joundmap = (map <string ، object>) dbobject.get ("_ id id") ؛ //transfer.0 Integer userD = integer.parseint (commutil.toString (ausgmap.get ("userId")). استبدال (". 0" ، "")) ؛ // هنا يمكننا العمل على بياناتنا ؛ عدد صحيح = integer.parseint (commutil.toString (dbObject.get ("count"))) ؛ }2. DbObject
بدون مزيد من اللغط ، إذا كنت تعتقد أن الطريقة الأولى طويلة الأجل بشكل خاص ، فسوف أحضر لك استعلام تجميع أكثر إيجازًا برمز أكثر إيجازًا:
فقط قم بتحميل الكود.
1. انتبه إلى الحزمة المستوردة:
استيراد com.mongodb.dboBject ؛ استيراد com.mongodb.util.json ؛
2. $ macth:
(تاريخ بدء تشغيل Quary-Query ؛ تاريخ الانتهاء في نهاية اليوم)
dbObject Match = (dbObject) json.parse ("{$ match: {'status': '1' ، 'time': {$ gte: '"+beginday+"' ، $ lte: '"+endday+"}}}) ؛3. مجموعة $:
(تم تجميعها بواسطة userId ، عد عدد المستخدمين ، وتراكم قيمة حقل AMOUT ، واتخاذ الحد الأقصى لقيمة حقل AMOUT)
dbObject Group = (DbObject) json.parse ("{$ group: {_ id: '$ userid' ، count: {$ sum: 1} ، Total: {$ sum: '$ extric'} ، maxSigle: {$ max: '$ must'}}}}") ؛بعد تقطيع الظروف ، ابدأ في الاستعلام:
قائمة <DbObject> list = new ArrayList <DbObject> () ؛ list.add (match) ؛ list.add (Group) ؛ AggregationOutput Output = mongotemplate.getCollection ("اسم الجدول"). aggregate (list) ؛ليست هناك حاجة للحديث عن نتيجة اجتياز. تم وصف ما سبق بالتفصيل
هل الطريقة الثانية أبسط بكثير من الآخر؟ لكنه يختبر معرفة الفرد ببيانات mongodb.
【ممتد】
ثم توسع الطريقة أعلاه
// الحالة 0 أو 1 ؛ اكتب ليس 11 ؛ time dbObject match = (dbObject) json.parse ("{$ match: {'status': {$ in: ['0' ، '1']} ، type: {$ ne: 11} ، 'time': {$ gte: '+beginday+"' ، $ lte: '+endday+"}}}}} آخر مرة مجموعة DbObject Group = (DbObject) json.parse ("{$ group: {_ id: '$ userid' ، count: {$ sum: 1} ، last time: {$ max: '$ time'}}}") ؛ json.parse ("{$ match: {count: {$ gte: 100}}}}") ؛ // $ project ---- ما هي الحقول التي يجب عرضها في نتيجة الاستعلام ، ويتم ضبط الشاشة على 1. لا يحتاج الحقل _ID (الحقل) إلى عرضه على النحو التالي ، لذا فأنت بحاجة إلى تحديده على النحو التالي: // db. collection name.AgGregate ([{$ project: {_id: 0 ، count: 1 ، lastsucctime: 1}}]) dbObject project = (dbObject) json.parse ("{$ project: {_ id: 1 ، count: 1 ، lastsucctime: 1}}") json.parse ("{$ sort: {'count':-1}}") ؛ // قائمة الفرز <DbObject> list = new ArrayList <DbObject> الاسم ") .Aggregate (قائمة) ؛ // نتائج الاستعلام3
basicdBObject GroupIndex = new basicdbobject () ؛ basicdBObject distorquery = new basicdbobject () ؛ distorquery.put ("userId" ، new basicdbobject ("$ in" ، userids) ؛ من database.prev يمثل نتيجة الاستعلام // prev.count العدد هنا هو عدد الخطوة السابقة initIndex) تقليل = "الدالة (doc ، prev) {if (doc.status == 0) {prev.count+= 1 ؛} ؛}" getCollection ("collection"). Group (GroupIndex ، DistancePquery ، initIndex ، تقليل ، null) ؛أخيرًا ، يمكنك الحصول على النتيجة عن طريق الحلق من خلال القائمة. [PS: هناك قيود على طريقة التجميع هذه للمجموعة ---> سيكون هناك خطأ إذا تجاوز 20،000 بيانات]
ما سبق هو ما أستخدمه معالجة تجميع MongoDB في معالجة الأعمال العادية. إذا كانت هناك طريقة أفضل أو شيء يحتاج إلى تحسين ، فيرجى ترك رسالة لي ~