आप इससे कई तरह से निपट सकते हैं।
सबसे पहले यदि आपके पास 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
के साथ , लेकिन निश्चित रूप से "अभी तक हल किया जाना है"। इसलिए यदि आप अलग आउटपुट चाहते हैं, तो आप इसे स्वयं करें।