2013-04-02 12 views
5

Tôi đang tìm ra khung tập hợp mongodb cực kỳ mạnh mẽ - nó có vẻ như là một lựa chọn tốt để làm phẳng một đối tượng. Lược đồ của tôi sử dụng một mảng các đối tượng con trong một mảng được gọi là tài liệu. Số lượng tài liệu có thể thay đổi, nhưng một trường (danh mục) cụ thể sẽ là duy nhất trên các đối tượng trong mảng. Tôi muốn sử dụng khung tổng hợp để làm phẳng cấu trúc và tự động đổi tên các trường dựa trên giá trị của trường thể loại. Tôi không thể tìm thấy một cách dễ dàng để thực hiện điều này bằng cách sử dụng một dự án $ cùng với $ cond. Là có một cách?Khuôn khổ tập hợp MongoDB - Đổi tên trường động

Lý do cho mảng đối tượng vật chất là cho phép tìm kiếm đơn giản:

ví dụ: {'materials.name': 'XYZ'} kéo trở lại bất kỳ tài liệu nào mà XYZ được tìm thấy.

Ví dụ: của trước và sau khi tài liệu

{ 
"_id" : ObjectId("123456"), 
"materials" : [ 
    { 
     "name" : "XYZ", 
     "type" : "Red", 
     ... 
     "category" : "A" 
    }, 
    { 
     "name" : "ZYX", 
     "type" : "Blue", 
     ... 
     "category" : "B" 
    }] 
} 

để

{ 
"material_A_name" : "XYZ", 
"material_A_type" : "Red", 
... 
"material_B_name" : "ZYX", 
"material_B_type" : "Blue", 
... 
} 
+0

Tài liệu 'sau' của bạn không hợp lệ JSON – JohnnyHK

+0

Cảm ơn, đã cập nhật - đó là lỗi khi tạo mô hình trong trình chỉnh sửa của tôi – user2234151

+0

Ok, tôi hiểu bạn đang cố gắng làm gì bây giờ. Không có nhiều hỗ trợ cho các khóa được tạo động trong khung làm việc vì vậy tôi không thấy cách bạn có thể làm điều này với điều đó. Bạn có thể chỉ cần đăng quá trình kết quả trong mã để làm điều đó. – JohnnyHK

Trả lời

5

Có một yêu cầu cho một cái gì đó như thế này trong jira https://jira.mongodb.org/browse/SERVER-5947 - bầu nó lên nếu bạn muốn có tính năng này.

Trong khi đó, có một công việc xung quanh nếu bạn biết trước giá trị có thể có của khóa sẽ là gì (nghĩa là tất cả các giá trị duy nhất của "danh mục") và tôi có một số mã mẫu trên đó on my blog.

+0

Lưu ý rằng khả năng chuyển đổi khóa sang giá trị và ngược lại đã có sẵn từ phiên bản MongoDB 3.4.4. –