Làm việc với Nodejs và MongoDB thông qua trình điều khiển gốc Node MongoDB. Cần truy xuất một số tài liệu và thực hiện sửa đổi, sau đó lưu chúng lại ngay. Đây là một ví dụ:
db.open(function (err, db) {
db.collection('foo', function (err, collection) {
var cursor = collection.find({});
cursor.each(function (err, doc) {
if (doc != null) {
doc.newkey = 'foo'; // Make some changes
db.save(doc); // Update the document
} else {
db.close(); // Closing the connection
}
});
});
});
Với tính chất không đồng bộ, nếu quá trình cập nhật tài liệu lâu hơn, thì khi con trỏ đến cuối tài liệu, kết nối cơ sở dữ liệu sẽ bị đóng. Không phải tất cả các bản cập nhật đều được lưu vào cơ sở dữ liệu.
Nếu db.close()
bỏ qua, tất cả các tài liệu được cập nhật chính xác, nhưng ứng dụng bị treo, không bao giờ thoát.
Tôi thấy một bài đăng đề xuất sử dụng bộ đếm để theo dõi số lượng cập nhật, khi trở về 0, sau đó đóng db. Nhưng tôi có làm gì sai ở đây không? Cách tốt nhất để xử lý tình huống này là gì? Có db.close()
phải được sử dụng để giải phóng tài nguyên? Hay một kết nối db mới cần phải mở?