2010-09-09 18 views
6

Sắp xếp của một mongoo noob, và tôi có cảm giác tôi đang giải quyết vấn đề này theo hướng sai.Cách cập nhật dựa trên dữ liệu hiện có trong mongo

Tôi có khoảng 7 triệu bộ sưu tập tài liệu. Mỗi tài liệu có hai trường mà tôi muốn sửa đổi (không thay thế), về cơ bản chúng là các chuỗi lớn có \\n và tôi muốn thay thế các trường đó bằng \n.

Tôi đã dành khoảng một giờ để tìm cách "quay lại tham chiếu" đối tượng được truy vấn trả về, hoàn toàn không tồn tại. Cách tiếp cận tốt nhất cho một thứ như thế này là gì?

Trả lời

6

Bạn sẽ phải truy vấn tất cả tài liệu và cập nhật từng tài liệu một. Nếu bạn làm điều đó trong JavaScript, nó sẽ là một cái gì đó như:

mydb = db.getSisterDB("whateverDBYoureUsing"); 
var cursor = mydb.foo.find(); 
while (cursor.hasNext()) { 
    var x = cursor.next(); 

    /* replace \\n with \n in x's strings ... */ 

    db.foo.update({_id : x._id}, x); 
} 

Bạn có thể sao chép này vào một tập tin .js (nói, replace.js), thay đổi tên db và bộ sưu tập, và chạy nó như là một kịch bản từ vỏ:

mongo replace.js 
+0

khá nhiều những gì tôi đang tìm kiếm :) –

+0

Ouch, tôi đã hy vọng nó sẽ không được phức tạp này ... –

0

Những gì bạn muốn đang thực hiện upsert http://www.mongodb.org/display/DOCS/Updating#Updating-UpsertswithModifiers

+0

Bạn sẽ sử dụng công cụ sửa đổi cập nhật nào cho điều này? – Thilo

+0

@Thilo: thực sự nó là những thứ khá giống với Kristina gợi ý. Câu trả lời ít phức tạp hơn, nhưng cũng vậy. Vì vậy, tôi không nhận được, tại sao Markus có "-2" cho nó. – noncom

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