MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

उप-दस्तावेज़ से $sum घटाएँ

वास्तव में आप बस यह कर सकते हैं:

db.table.aggregate( [
  { "$match" : { "tenantId": "paul" } },
  //{ $unwind:{ path: "$deposits", preserveNullAndEmptyArrays: true  }},
  { "$project":
    "deposits": { "$subtract": ["$price", { "$sum": "$deposits.amount" } ] }
  }}
])

MongoDB 3.2 के बाद से आप वास्तव में $project कर सकते हैं $sum के साथ और तर्कों की एक सरणी (या एक सरणी) और इसलिए $अनविंड . की आवश्यकता नहीं है बिल्कुल।

"लंबा" तरीका, जो "पुराना" तरीका है, वास्तव में $अनविंड करें , लेकिन फिर आप वास्तव में एक $project $group को फ़ॉलो करना :

db.table.aggregate( [
  { "$match" : { "tenantId": "paul" } },
  { $unwind:{ path: "$deposits", preserveNullAndEmptyArrays: true  }},
  { "$group":
    "_id": "$_id",
    "price": { "$first": "$price" },
    "deposits": { "$sum": "$deposits.amount" }
  }},
  { "$project": {
    "deposits": { "$subtract": [ "$price", "$deposits" ] }
  }}
])

और निश्चित रूप से आपको $first की आवश्यकता होगी संचायक "कीमत" . वापस करने के लिए $group से फ़ील्ड चरण ताकि इसे निम्नलिखित चरण में उपयोग किया जा सके।

लेकिन अगर आप preserveNullAndEmptyArrays कर सकते हैं , तो आपके पास वास्तव में MongoDB 3.2 है, और इसलिए बिना . कथन का उपयोग करना बेहतर है $unwind बिल्कुल, क्योंकि इसे इस तरह से करना बहुत तेज़ है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Async बल्क (बैच) Node.js . के माध्यम से MySQL (या MongoDB?) में डालें

  2. मोंगोइड में अद्वितीय एम्बेडेड दस्तावेज़ कैसे लागू करें

  3. mongoengine +django एक ही सामग्री की वस्तुओं की संख्या की गणना कैसे करें

  4. आयात त्रुटि:'पाइमोंगो' नाम का कोई मॉड्यूल नहीं

  5. क्या मोंगो-कनेक्टर इलास्टिक्स खोज में डालने से पहले फ़ील्ड जोड़ने का समर्थन करता है?