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

सभी कुंजियों को सूचीबद्ध किए बिना सबफ़ील्ड को प्रोजेक्शन में शीर्ष स्तर पर बढ़ावा दें

MongoDB 3.4 के साथ आप $objectToArray . का उपयोग कर सकते हैं और $arrayToObject $replaceRoot . के साथ इसे बदलने के लिए:

db.wish.aggregate([
  { "$replaceRoot": {
    "newRoot": {
      "$arrayToObject": {
        "$concatArrays": [
          [{ "k": "a", "v": "$a" }],
          { "$objectToArray": "$z" }
        ]
      }
    }
  }}
])

या यहां तक ​​कि "a" . निर्दिष्ट किए बिना भी यह लंबा मंत्र संपत्ति:

db.wish.aggregate([
  { "$replaceRoot": {
    "newRoot": {
      "$arrayToObject": {
        "$reduce": {
          "input": {
            "$filter": {
              "input": { "$objectToArray": "$$ROOT" },
              "as": "r",
              "cond": { "$ne": [ "$$r.k", "_id" ] }
            }
          },
          "initialValue": [],
          "in": {
            "$concatArrays": [
              "$$value",
              { "$cond": {
                "if": {  "$gt": [ "$$this.v", {} ] },
                "then": { "$objectToArray": "$$this.v" },
                "else": ["$$this"]
              }}
            ]
          }  
        } 
      }
    }
  }}
])  

दोनों उत्पादन करते हैं:

{ "a" : 1, "b" : 2, "c" : 3 }

$concatArrays . का मज़ेदार उपयोग भविष्य के संस्करणों में आवश्यक नहीं होना चाहिए क्योंकि एक $mergeObjects . होगा ऑपरेटर जो इसे थोड़ा साफ कर देगा।

लेकिन आप मूल रूप से क्लाइंट कोड में वही काम कर सकते हैं। उदाहरण के लिए जावास्क्रिप्ट में शेल के लिए:

db.wish.find().map( doc => (
  Object.assign({ a: doc.a }, doc.z )
))

या "a" . के बिना संस्करण फिर से:

db.wish.find().map( doc => 
  Object.keys(doc).filter(k => k !== '_id').map(k => 
   ( typeof(doc[k]) === "object" ) ? 
     Object.keys(doc[k]).map(i => ({ [i]: doc[k][i] }))
       .reduce((acc, curr) => Object.assign(acc,curr),{})
     : { [k]: doc[k] }
  ).reduce((acc,curr) => Object.assign(acc,curr),{})
)

समान उत्पादन करता है

{ "a" : 1, "b" : 2, "c" : 3 }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB के लिए डेटाबेस अनुक्रमण का अवलोकन

  2. MongoDB - क्वेरी के साथ विशिष्ट अनुक्रमणिका का उपयोग नहीं करता है

  3. MongoDB में किसी सरणी से मान निकालने के 3 तरीके

  4. MongoDB प्रतिकृति सेट को स्टैंड अलोन सर्वर में कैसे बदलें

  5. mongodb 3.4.3 अनुमति अस्वीकृत wiredtiger_kv_engine.cpp 267 त्रुटि ubuntu 16 के साथ