Làm cách nào để in ra hơn 20 mục (tài liệu) trong trình bao của MongoDB?


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

sẽ không làm điều đó. Nó vẫn chỉ in ra 20 tài liệu.

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

cả hai sẽ in ra chế độ xem rất mở rộng của từng tài liệu thay vì phiên bản 1 dòng cho find():


Theo mặc định, vỏ mongo chỉ in 20 tài liệu đầu tiên, bạn có thể nhận được 20 tài liệu lô tiếp theo bằng cách nhập Type itvào trình bao. Và như thế.
roottraveller

Câu trả lời:


381

1
Có cách nào để làm cho điều này liên tục?
Lukasz Wiktor

7
@LukaszWiktor có, bạn có thể tạo tệp $ HOME / .mongorc.js và đặt cài đặt shellBatchSize đó vào đó. Của tôi có cài đặt kích thước lô truy vấn và kích hoạt rs.slaveOk (). Cách sử dụng cũng hơi khác khi sử dụng --eval qua dòng lệnh. xem: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
Thật tuyệt! Cảm ơn @matiaselgart
Lukasz Wiktor

liên kết đã lỗi thời, nó không chứa thông tin đó. Ngoài ra, tôi có thể vượt qua điều này như một biến môi trường không?
phil294

157

Từ trình bao nếu bạn muốn hiển thị tất cả các kết quả bạn có thể làm db.collection.find().toArray()để có được tất cả các kết quả mà không có nó.


Điều này. Nếu bạn chỉ muốn tất cả chúng trong một cái vỏ để bạn có thể cắt và dán, điều này là đủ.
siêu sáng

Cái này hữu ích hơn
anwerj

Đây chính xác là những gì đã làm cho tôi. Sự thật mà nói tôi chỉ cần một cách để lưu tất cả kết quả từ đầu ra Robomongo. Cảm ơn bạn!
Andrés Botero

Điều đó thật tuyệt, và nó cũng cho phép tôi đưa kết quả đến jq :)
Omer van Kloeten

Giải pháp hoàn hảo! Man, điều này rất hữu ích.
coderpc

93

Bạn có thể sử dụng itbên trong vỏ để lặp lại trong 20 kết quả tiếp theo. Chỉ cần gõ itnếu bạn thấy "có nhiều hơn" và bạn sẽ thấy 20 mục tiếp theo.


35
ồ, đó thực sự là về cách in ra tất cả mà không cần sử dụngit
phân cực

15
Cảm ơn Halfdan, bạn gấp đôi tên người dùng của bạn nói rằng bạn là!
cassi.lup

6
Toàn bộ ý tưởng là KHÔNG sử dụng trình vòng lặp
Amir Kost

2
Tôi đã bỏ qua vì đây là điều mà OP muốn tránh (đó là hành vi mặc định).
crafter

41

Luôn luôn có thể làm:

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

Để có được cái nhìn nhỏ gọn đó.

Ngoài ra, tôi thấy rất hữu ích để giới hạn các trường được trả về bởi find:

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

sẽ chỉ trả về trường _id và tên từ foo.


1
Tôi thích cách này vì nó có thể chạy trong shell script (máy khách mongo với --eval)
Zheng Kai

1
@ZhengKai nếu bạn đang sử dụng tập lệnh và không có trong shell thì shellBatchSize không liên quan vì kết quả của bạn sẽ không được lặp lại cho bạn bởi trình bao, bạn sẽ phải tự làm điều đó.
Asya Kamsky

Tojson () chính xác là những gì tôi đang tìm kiếm để chuyển đổi nó từ DBQuery, cảm ơn bạn!
Mark Pieszak - Trilon.io

4

Tôi khuyên bạn nên có một ~/.mongorc.jstệp để bạn không phải đặt kích thước mặc định mọi lúc.

 # 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

Để biết thêm về những gì bạn có thể làm, tôi khuyên bạn nên xem bài viết này: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

Trong shell mongo, nếu con trỏ trả về không được gán cho một biến bằng từ khóa var, con trỏ sẽ tự động được lặp lại để truy cập tới 20 tài liệu đầu tiên phù hợp với truy vấn. Bạn có thể đặt biến DBQuery.shellBatchSize để thay đổi số lượng tài liệu được lặp lại tự động.

Tham khảo - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.