Cảm ơn bạn đã trả lời. Tôi đã không rõ ràng trong câu hỏi ban đầu của tôi trong đó tôi không muốn phải xác định các lĩnh vực để cập nhật các con số, mà là đi bộ mỗi tài sản và thực hiện kiểm tra.
tôi đã đặt cùng chức năng này ít để làm các trick:
var cursor = db.results.find();
while (cursor.hasNext()) {
var doc = cursor.next();
for (key in doc) {
if (key.match(/^metric_.*/i) && !isNaN(doc[key])) {
doc[key] = parseFloat(doc[key]);
db.results.update({ _id : doc._id }, doc);
}
}
}
Hai điều cần lưu ý:
- này chỉ thực hiện việc kiểm tra và chuyển đổi sang cấp độ đầu tiên của tài sản. Nó có thể dễ dàng sửa đổi để đi sâu hơn, nhưng đây là tất cả những gì tôi cần vào lúc này.
- Chức năng này sẽ làm nổ các giá trị ngày của bạn! Ngày javascript được đánh giá bởi
isNaN
là sai và do đó sẽ được coi là số. Trong trường hợp của tôi, việc sử dụng parseFloat
sẽ thực sự đặt giá trị thành isNaN
. Một lần nữa, một sửa chữa rất dễ dàng cho người xem, nhưng tôi chỉ muốn cung cấp tuyên bố từ chối trách nhiệm đó.
Hy vọng điều này sẽ giúp người khác ở vị trí của tôi.
Nguồn
2013-02-13 21:03:44
Theo mongodb 2.2, bản cập nhật sẽ lấy truy vấn làm thông số đầu tiên, vì vậy {_id: doc._id} thay vì chỉ doc._id. –
Thay vì 'isNaN (doc.xyz)', bạn nên sử dụng 'typeof doc.xyz == 'string'' nếu chuỗi của bạn là" 123 "hoặc" 3456 ". – ov1d1u
@ ov1d1u - Câu hỏi ban đầu tuy nhiên được hỏi cụ thể về cách sử dụng 'isNaN', vì vậy tôi đã chọn nó. – WiredPrairie