OK, đây là một số câu hỏi liên quan có thể giúp:
Get all field names trong một bộ sưu tập sử dụng bản đồ-giảm.
Đây là a recursive version liệt kê tất cả các trường có thể.
Hy vọng rằng điều đó có thể giúp bạn bắt đầu. Tuy nhiên, tôi nghi ngờ rằng bạn sẽ gặp phải một số vấn đề với yêu cầu này. Có hai vấn đề ở đây:
- Tôi không thể tìm thấy hàm "gettype" cho JSON. Bạn có thể truy vấn bằng
$type
, nhưng có vẻ như bạn thực sự có thể chạy chức năng gettype
trên một trường và có bản đồ đó quay trở lại loại BSON.
- Một trường có thể chứa dữ liệu của nhiều loại, vì vậy bạn sẽ cần một kế hoạch để xử lý việc này. Ngay cả khi nó không rõ ràng Mongo có thể lưu trữ một số con số như ints và những người khác nổi mà không có bạn thực sự biết. Trong thực tế, với trình điều khiển PHP, điều này là hoàn toàn có thể.
Vì vậy, nếu bạn cho rằng bạn có thể giải quyết vấn đề # 1, sau đó bạn sẽ có thể giải quyết vấn đề # 2 bằng sự thay đổi nhỏ trên "Nhận tất cả Tên trường".
Nó có lẽ sẽ giống như thế này:
"map" : function() { for (var key in this) { emit(key, [ typeof value[key] ]); } }
"reduce" : function(key, stuff) { return (key, add_to_set(stuff)); }
Vì vậy, về cơ bản bạn sẽ phát ra các key
và type of key value
(như là một mảng) trong hàm bản đồ. Sau đó, từ chức năng giảm, bạn sẽ thêm các mục nhập duy nhất cho từng loại.
Vào cuối thời gian bạn sẽ có dữ liệu như thế này
{"_id":[255], "name" : [1,5,8], ... }
Tất nhiên, đây là tất cả rất nhiều công việc, tùy thuộc vào vấn đề thực tế của bạn, bạn có thể chỉ muốn đảm bảo (từ mã của bạn) rằng bạn luôn đặt đúng loại dữ liệu. Việc tìm kiếm loại dữ liệu sau khi dữ liệu nằm trong DB chắc chắn là một nỗi đau.
này sẽ cung cấp cho các loại JS, mà có thể khác với các loại BSON. Ví dụ, nếu bạn gõ typeof db.employee.findOne() ._ id, bạn sẽ nhận được "string", nhưng kiểu BSON là "Object id." –