วิธีพิมพ์เอกสารมากกว่า 20 รายการ (เอกสาร) ในเชลล์ของ MongoDB?


253
db.foo.find().limit(300)

จะไม่ทำมัน มันยังพิมพ์ออกมาเพียง 20 เอกสาร

db.foo.find().toArray()
db.foo.find().forEach(printjson)

ทั้งสองจะพิมพ์มุมมองที่ขยายออกมากของเอกสารแต่ละฉบับแทนที่จะเป็นเวอร์ชัน 1 บรรทัดสำหรับfind():


โดยค่าเริ่มต้น mongo shell พิมพ์เฉพาะเอกสาร 20 ฉบับแรกคุณสามารถรับเอกสารชุดถัดไป 20 โดยพิมพ์Type itในเชลล์ และอื่น ๆ
roottraveller

คำตอบ:


381

1
มีวิธีที่จะทำให้สิ่งนี้ขัดขืนหรือไม่?
Lukasz Wiktor

7
@LukaszWiktor ใช่คุณสามารถสร้างไฟล์ $ HOME / .mongorc.js และตั้งค่า shellBatchSize นั้นได้ mine มีการตั้งค่าขนาดแบทช์แบบสอบถามและเปิดใช้งาน rs.slaveOk () การใช้งานนั้นแตกต่างกันเล็กน้อยเมื่อใช้ --eval ผ่าน commandline ดู: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
เยี่ยมมาก! ขอบคุณ @matiaselgart
Lukasz Wiktor

ลิงก์นี้ล้าสมัยไม่มีข้อมูลดังกล่าว นอกจากนี้ฉันสามารถส่งสิ่งนี้เป็นตัวแปรสภาพแวดล้อมได้หรือไม่
phil294

157

จากเชลล์หากคุณต้องการแสดงผลลัพธ์ทั้งหมดคุณสามารถทำได้db.collection.find().toArray()เพื่อให้ได้ผลลัพธ์ทั้งหมดโดยไม่มีมัน


นี้. หากคุณต้องการให้พวกมันทั้งหมดอยู่ในเปลือกเพื่อให้คุณสามารถตัดและวางสิ่งนี้ก็เพียงพอแล้ว
แสงสว่าง

อันนี้มีประโยชน์มากขึ้น
anwerj

นี่คือสิ่งที่ฉันคิด ความจริงจะบอกฉันเพียงต้องการวิธีการบันทึกผลลัพธ์ทั้งหมดจาก Robomongo ผลลัพธ์ ขอบคุณ!
Andres Botero

ยอดเยี่ยมมากและมันก็ให้ฉันได้ผลลัพธ์เป็น jq :)
Omer van Kloeten

โซลูชั่นที่สมบูรณ์แบบ! ผู้ชายคนนี้มีประโยชน์มาก
coderpc

93

คุณสามารถใช้itด้านในของเชลล์เพื่อวนผลการค้นหา 20 รายการถัดไป เพียงพิมพ์itถ้าคุณเห็น "มีมากขึ้น" และคุณจะเห็น 20 รายการถัดไป


35
โอ้มันเป็นเรื่องเกี่ยวกับวิธีการพิมพ์ออกมาทั้งหมดโดยไม่ใช้it
nonopolarity

15
ขอบคุณ halfdan คุณชื่อผู้ใช้ของคุณสองเท่าบอกว่าคุณเป็น!
cassi.lup

6
แนวคิดทั้งหมดไม่ควรใช้ตัววนซ้ำ
Amir Kost

2
ฉันลงคะแนนเพราะนี่คือสิ่งที่ OP ต้องการหลีกเลี่ยง (ซึ่งเป็นพฤติกรรมเริ่มต้น)
crafter

41

สามารถทำได้เสมอ:

db.foo.find().forEach(function(f){print(tojson(f, '', true));});

เพื่อให้ได้มุมมองที่กะทัดรัด

นอกจากนี้ฉันพบว่ามีประโยชน์มากในการ จำกัด ฟิลด์ที่ส่งคืนโดย find ดังนี้:

db.foo.find({},{name:1}).forEach(function(f){print(tojson(f, '', true));});

ซึ่งจะส่งกลับเฉพาะฟิลด์ _id และชื่อจาก foo


1
ฉันชอบวิธีนี้เพราะมันสามารถทำงานในเชลล์สคริปต์ (ลูกค้า Mongo ด้วย--eval)
เจิ้งเหอไก่

1
@ZhengKai หากคุณกำลังใช้สคริปต์และไม่ได้อยู่ในเชลล์ shellBatchSize นั้นไม่เกี่ยวข้องเนื่องจากผลลัพธ์ของคุณจะไม่ถูกทำซ้ำโดยเชลล์คุณจะต้องทำเอง
Asya Kamsky

tojson () เป็นสิ่งที่ฉันต้องการแปลงจาก DBQuery ขอบคุณ!
Mark Pieszak - Trilon.io

4

ฉันแนะนำให้คุณมี~/.mongorc.jsไฟล์ดังนั้นคุณไม่จำเป็นต้องตั้งค่าขนาดเริ่มต้นทุกครั้ง

 # execute in your terminal
 touch ~/.mongorc.js
 echo 'DBQuery.shellBatchSize = 100;' > ~/.mongorc.js
 # add one more line to always prettyprint the ouput
 echo 'DBQuery.prototype._prettyShell = true; ' >> ~/.mongorc.js

หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณสามารถทำได้ฉันขอแนะนำให้คุณอ่านบทความนี้: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

ในเชลล์ mongo หากเคอร์เซอร์ที่ส่งคืนไม่ได้ถูกกำหนดให้กับตัวแปรโดยใช้คำสำคัญ var เคอร์เซอร์จะถูกทำซ้ำโดยอัตโนมัติเพื่อเข้าถึงเอกสาร 20 อันดับแรกที่ตรงกับคำค้นหา คุณสามารถตั้งค่าตัวแปร DBQuery.shellBatchSize เพื่อเปลี่ยนจำนวนเอกสารที่วนซ้ำอัตโนมัติ

ข้อมูลอ้างอิง - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.