2013-05-14 26 views
22

Sự khác nhau giữa toán tử $match được sử dụng bên trong hàm tổng hợp và số find thông thường trong Mongodb là gì?

Tại sao chức năng find cho phép đổi tên các tên trường như chức năng tổng hợp? ví dụ: Tóm lại, chúng tôi có thể chuyển chuỗi sau:

{ "$project" : { "OrderNumber" : "$PurchaseOrder.OrderNumber" , "ShipDate" : "$PurchaseOrder.ShipDate"}} 

Trong khi đó, tìm không cho phép điều này.

Tại sao sản lượng tổng hợp không trả về dưới dạng DBCursor hoặc Danh sách? và tại sao chúng ta không thể nhận được một số tài liệu được trả về?

Cảm ơn bạn.

+0

[MongoDB 2,6 hoạt động tổng hợp sẽ trả về một con trỏ] (http://docs.mongodb.org/master/release-notes/2.6/# aggregation-operations-now-return-con trỏ). – vinipsmaker

Trả lời

28

Tại sao sản lượng tổng hợp không trả lại dưới dạng DBCursor hoặc Danh sách?

Khung tổng hợp được tạo để giải quyết các vấn đề dễ dàng mà nếu không sẽ yêu cầu giảm bản đồ.

Khuôn khổ này thường được sử dụng để tính toán dữ liệu yêu cầu db đầy đủ làm đầu vào và ít tài liệu làm đầu ra.

Sự khác biệt giữa toán tử kết hợp $ được sử dụng bên trong hàm tổng hợp và tìm thấy thường xuyên trong Mongodb là gì?

Một trong những khác biệt, như bạn đã nói, là loại trả về. Tìm kết quả đầu ra của hoạt động dưới dạng DBCursor.

khác biệt:

  • kết quả Aggregation phải under 16MB. Nếu bạn đang sử dụng shards, toàn bộ dữ liệu must be collected in a single point sau $group hoặc $sort đầu tiên.
  • $ match mục đích duy nhất là cải thiện sức mạnh tổng hợp, nhưng nó có một số công dụng khác, như cải thiện hiệu suất tổng hợp.

và tại sao chúng tôi không thể nhận được số tài liệu được trả lại?

Bạn có thể. Chỉ cần đếm số phần tử trong mảng kết quả hoặc thêm lệnh sau vào cuối của ống:

{$group: {_id: null, count: {$sum: 1}}} 

Tại sao không phải là chức năng tìm cho phép đổi tên các tên trường như hàm tổng hợp?

MongoDB còn trẻ và các tính năng vẫn đang đến. Có lẽ trong một phiên bản tương lai chúng tôi sẽ có thể làm điều đó. Đổi tên các trường là quan trọng hơn trong số tổng hợp so với số tìm.

EDIT (2014/02/26):

MongoDB 2.6 aggregation operations will return a cursor.

EDIT (2014/04/09):

MongoDB 2.6 was released with the predicted aggregation changes.

+0

Cập nhật: Trong mongo 3.4 bạn có thể đếm tổng hợp bằng '{$ count:" number_of_elements "}' – Daniel

0

Tôi đã nghiên cứu một vài điều về tập hợp và tìm kiếm cuộc gọi: Tôi đã làm điều này với sắp xếp giảm dần trong bảng tài liệu 160k và giới hạn đầu ra của tôi cho một vài tài liệu.

  1. Lệnh Tập hợp chậm hơn lệnh tìm.
  2. Nếu bạn truy cập vào dữ liệu như ToList() lệnh tổng hợp nhanh hơn tìm.
  3. nếu bạn xem tại tổng thời gian (điểm 1 + 2) các lệnh dường như là bằng

Có thể kết hợp tự động gọi ToList() và không nhất thiết phải gọi nó một lần nữa. Nếu bạn không gọi ToList() sau đó cuộc gọi find() sẽ nhanh hơn nhiều.

7 [ms] vs 50 [ms] (5 văn bản)

Các vấn đề liên quan