Tôi khá chắc rằng đếm (truy vấn) là viết tắt của tìm (truy vấn) .count() - nói cách khác, giải thích hoàn toàn giống nhau. Không có tính năng tối ưu hóa số cụ thể được thực hiện, ngoại trừ có thể là số lượng bộ sưu tập đầy đủ. Ví dụ, chạy một số đếm trên một trường không được lập chỉ mục cho một phạm vi sẽ chính xác cùng một khoảng thời gian khi chạy một hàm find.explain với cùng một phạm vi.
Tôi đã viết một hàm gọi là timeCount, tính trung bình của thời gian đếm hàm, sau đó hiển thị đầu ra giải nghĩa để so sánh.
function timeCount(coll, query) {
var n = 5;
var total = 0;
for(var i = 0; i < n; i++) {
var start = new Date();
db[coll].find(query).count();
var end = new Date();
total += (end - start);
print("time[" + i + "]: " + (end - start) + "ms");
}
print("average time: " + (total/n));
var explain = db[coll].find(query).explain();
print("explain (from find): ");
for(e in explain) {
if(typeof explain[e] == "string" || typeof explain[e] == "number") {
print(e + ": " + explain[e]);
}
}
}
Kết quả trông như thế này:
> timeCount('test',{x:{$gt:5000}});
time[0]: 1339ms
time[1]: 1280ms
time[2]: 1347ms
time[3]: 1322ms
time[4]: 1299ms
average time: 1317.4
explain (from find):
cursor: BtreeCursor x_1_y_1
nscanned: 995062
nscannedObjects: 995062
n: 995062
millis: 1390
nYields: 0
nChunkSkips: 0
Nguồn
2012-04-13 04:35:47
"Tôi khá chắc chắn rằng đếm (truy vấn) là viết tắt của tìm (truy vấn) .count() - nói cách khác, giải thích là chính xác như nhau." Có, nhưng bạn không thể dễ dàng có được một giải thích cho một trong hai: 'db.people.find ({}). Count(). Explain()' là một lỗi, giống như 'db.people.count ({}).) '. – Thilo
Tôi vừa nói rằng giải thích từ find() sẽ cho bạn kết quả tương tự như một giải thích giả thuyết từ đếm. –
Không, điều đó không có ý nghĩa. Một tìm kiếm phải lấy tài liệu, một số không. Với một chỉ số, nó sẽ tạo nên sự khác biệt lớn. – Thilo