Tôi có một số tài liệu 25k (4 GB ở dạng json thô) dữ liệu mà tôi muốn thực hiện một số thao tác javascript để làm người tiêu dùng dữ liệu cuối cùng của mình (R
) giúp truy cập dữ liệu này dễ dàng hơn và tôi muốn "kiểm soát phiên bản" những thay đổi này bằng cách thêm bộ sưu tập mới cho mỗi thay đổi, nhưng tôi không thể tìm ra cách thực hiện điều đó mà không cần giảm bớt
được thực hiện trong hoàn cảnh bản đồ/giảm
. Tôi muốn ánh xạ tài liệu một-một - tôi bắt đầu với bộ sưu tập_1
Bắt đầu với 25.356 tài liệu trong bộ sưu tập_2
kết thúc với 25.356 tài liệu.
Tôi có thể hack nó bằng cách này:
var reducer = hàm(khóa, mảng giá trị) {
trả về {key: value_array[0]}
}
Sau đó gọi nó như thế này:
db.flat_1.mapReduce(mapper, reducer, {keeptemp: true, out: 'flat_2'})
(Trình ánh xạ của tôi chỉ gọi các cuộc gọi phát ra một lần, với tham số đầu tiên là một chuỗi và tham số thứ hai là tài liệu cuối cùng. Đây là tập hợp các tham số thứ hai mà tôi thực sự muốn.)
Nhưng điều này có vẻ khó xử và tôi không biết tại sao nó lại hoạt động vì trong trình ánh xạ của tôi phát ra
Thông số cuộc gọi không tương đương với của tôi bộ giảm tốc
Ngoài ra, tham số trả về của .
Một tập tin như vậy
{
"_id": "0xWH4T3V3R",
"giá trị": {
"chìa khóa": {
"cuối cùng": ["ở đây"],
"thisIsWhatIWanted": ["Đúng vậy!"]
}
}
}
Điều này có vẻ không cần thiết.
Ngoài ra, một con trỏ thực hiện thao tác chèn của chính nó thậm chí còn không nhanh bằng bản đồGiảm
Một phần mười. Tôi không biết đủ về MongoDB để đánh giá nó, nhưng tôi đoán nó là về 50 lần
chậm. Có cách nào để chạy con trỏ song song không? tôi không quan tâm đến chuyện của tôi bộ sưu tập_2
Liệu tài liệu trong bộ sưu tập_1
Thứ tự của các tài liệu trong đó là khác nhau.
Khi sử dụng bản đồ/thu nhỏ bạn luôn nhận được
{ "giá trị" : { } }
để xóa giá trị
chìa khóa, bạn phải sử dụng hoàn thiện
chức năng.
Đây là cách đơn giản nhất để sao chép dữ liệu từ bộ sưu tập này sang bộ sưu tập khác:
bản đồ = hàm() { phát ra(this._id, this ); }
giảm = hàm(khóa, giá trị) { trả về giá trị[0]; }
finalize = hàm(khóa, giá trị) { db.collection_2.insert(giá trị); }
Sau đó, khi bạn chạy nó bình thường:
db.collection_1.mapReduce(bản đồ, giảm, {hoàn thiện: hoàn thiện });
Tôi là một lập trình viên xuất sắc, rất giỏi!