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

संग्रह में संग्रहीत सरणी को दोबारा आकार दें और CSV को निर्यात करें

आप इससे कई तरह से निपट सकते हैं।

सबसे पहले यदि आपके पास MongoDB 3.4 उपलब्ध है तो आप एक "View" का उपयोग कर सकते हैं। सरणी सामग्री "अन-घाव" के साथ संग्रह का प्रतिनिधित्व करने के लिए। एक "व्यू" मूल रूप से एक एकत्रीकरण पाइपलाइन विवरण है जो एक सामान्य संग्रह प्रतीत होता है जहां तक ​​​​संग्रह का उपयोग करने वाली अधिकांश क्रियाओं का संबंध है।

इसलिए मान लें कि आपके स्रोत संग्रह को "pages" . कहा जाता है यहां, फिर आप इसके साथ "व्यू" बनाएंगे:

db.createView("pageArray", "pages", [{ "$unwind": "$page_likes" }])

फिर आप संग्रह को सामान्य रूप से क्वेरी कर सकते हैं:

db.pageArray.find()

/* 1 */
{
    "_id" : ObjectId("4725bf8731b8faf4c04595bb"),
    "user_id" : "0939bf9w9804842f9f817ad100",
    "page_likes" : {
        "id" : "859302873383",
        "name" : "Hotdogs"
    }
}

/* 2 */
{
    "_id" : ObjectId("4725bf8731b8faf4c04595bb"),
    "user_id" : "0939bf9w9804842f9f817ad100",
    "page_likes" : {
        "id" : "8593683902",
        "name" : "Video Games"
    }
}

/* 3 */
{
    "_id" : ObjectId("4725bf8731b8faf4c04595bb"),
    "user_id" : "0939bf9w9804842f9f817ad100",
    "page_likes" : {
        "id" : "849204859849028",
        "name" : "Road Bikes"
    }
}

और बाद में mongoexport जारी करें जैसे कि यह एक सामान्य संग्रह था:

mongoexport -d test -c pageArray --type=csv --fields user_id,page_likes.id,page_likes.name
2017-07-05T13:14:11.588+1000    connected to: localhost
user_id,page_likes.id,page_likes.name
0939bf9w9804842f9f817ad100,859302873383,Hotdogs
0939bf9w9804842f9f817ad100,8593683902,Video Games
0939bf9w9804842f9f817ad100,849204859849028,Road Bikes
2017-07-05T13:14:11.589+1000    exported 3 records

बेशक जोड़ना --out या किसी फ़ाइल को वास्तव में आउटपुट करने के लिए एक मानक रीडायरेक्ट।

यदि आपका MongoDB पुराना संस्करण है लेकिन कम से कम $out है उपलब्ध है (MongoDB 2.6 से) फिर दूसरे संग्रह को लिखें:

db.pages.aggregate([
  { "$unwind": "$page_likes" },
  { "$project": { "_id": 0 } },
  { "$out": "pagesArray" }
])

फिर आप मूल रूप से वही mongoexport run चलाते हैं जैसा कि ऊपर बताया गया है क्योंकि यह एक ऐसा संग्रह भी है जो ऐसा करने के लिए सुलभ है।

यदि आप वास्तव में "व्यू" या "दूसरा संग्रह" नहीं बनाना चाहते हैं, तो आप बस mongo को एक छोटी स्क्रिप्ट भेज सकते हैं सीप। हालांकि बहुत ही हैकी तरीके से:

mongo --quiet --eval '
    print("user_id,page_likes.id,page_likes.name");
    db.pages.aggregate([ 
      { "$unwind": "$page_likes" },
      { "$project": { "_id": 0 } },
    ]).forEach(p => print(`${p.user_id},${p.page_likes.id},${p.page_likes.name}`))'

या बिना aggregate() . के भी और $unwind बिल्कुल:

mongo --quiet --eval '
    print("user_id,page_likes.id,page_likes.name");
    db.pages.find({},{ _id: 0 }).forEach(p =>
       p.page_likes.forEach(l => print(`${p.user_id},${l.id},${l.name}`)))'

जो आपको वही आउटपुट देता है:

user_id,page_likes.id,page_likes.name
0939bf9w9804842f9f817ad100,859302873383,Hotdogs
0939bf9w9804842f9f817ad100,8593683902,Video Games
0939bf9w9804842f9f817ad100,849204859849028,Road Bikes

यह भी ध्यान दें कि यदि आप अल्पविराम , . से भिन्न सीमांकक चाहते हैं या "चाहते हैं" यहाँ, तो शेल के साथ दो अंतिम दृष्टिकोणों में से कोई भी शायद जाने का रास्ता है। चूंकि यह mongoexport . के अलावा "शेड्यूल" है और mongoimport TOOLS-87 के साथ , लेकिन निश्चित रूप से "अभी तक हल किया जाना है"। इसलिए यदि आप अलग आउटपुट चाहते हैं, तो आप इसे स्वयं करें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB और जुड़ता है

  2. Amazon Linux पर MongoDB स्थापित करने के चरण

  3. Openshift NodeJS + MongoDB एप्लिकेशन अचानक बंद हो जाता है

  4. NodeJS और MongoDB FindAndModify () को हटाने या अपडेट करने की आवश्यकता है

  5. MongoDB में कॉलम का योग लेना