2012-11-28 24 views

Trả lời

21

Cập nhật: Xem Salvador answer để biết cách hiệu quả hơn để thực hiện việc này trong MongoDB 2.6+.


Lưu kết quả tập hợp trong một biến và sau đó chèn tài sản result nó thành một bộ sưu tập mới:

var result = db.foo.aggregate(...); 
db.bar.insert(result.result); 
+2

Chỉ cần có số trống để giữ tất cả các giá trị kết quả trong bộ nhớ. Xem [tại đây] (https://jira.mongodb.org/browse/SERVER-3253) để biết vấn đề liên quan đến '$ out'. –

+2

Ngoài ra, tập hợp kết quả đó cần phải phù hợp với kích thước tài liệu MongoDB chuẩn (16MB). –

+0

@AidanFeldman: Kết quả nội tuyến tổng hợp là [đã bị giới hạn] (http://docs.mongodb.org/manual/core/aggregation/#result) với kích thước tài liệu BSON tối đa. – Stennie

38

Bắt đầu với Mongo 2.6.0 bạn có thể làm điều này mà không cần bất kỳ thao tác natively bổ sung.

db.<collection>.aggregate([ 
    { <operation> }, 
    { <operation> }, 
    ..., 
    { $out : "<output-collection>" } 
]) 

Kiểm tra toán tử tổng hợp mới $out để biết thêm ví dụ chi tiết.

P.S. bằng cách này bạn không bị giới hạn kích thước 16Mb.

+0

Vì vậy, bạn phải làm gì trước 2.6? Tôi cần phải nhận được khoảng giới hạn 16Mb và vẫn tạo ra một bộ sưu tập mới bằng cách sử dụng đường ống tổng hợp trên 2.4. –

+0

Một lần nữa, cần phải có giới hạn khoảng 16MB. Đã làm việc trên một ví dụ 2.4. Đã sử dụng thành công 'find()', 'foreach()', 'insert()'. –

1

result.result không còn hoạt động nữa, hãy thử toArray().

var result = db.coll.aggregate(...); 
db.bar.insert(result.toArray()); 
Các vấn đề liên quan