2010-01-26 40 views
27

Tôi gặp khó khăn trong việc nắm bắt cách lọc các tài liệu nhúng trong MongoDB và bắt đầu nghĩ rằng tôi nên sử dụng một liên kết quan hệ, nhưng cảm thấy sai trong bối cảnh lưu trữ tài liệu.Lọc tài liệu nhúng trong MongoDB

Gắn bó với hệ thống blog/nhận xét điển hình, tôi có bộ sưu tập là blogs và mỗi blog có nhiều comments. Các chú thích được lưu trữ dưới dạng tài liệu nhúng bên trong tài liệu blog. Nó rất đơn giản để lọc bộ sưu tập blogs của tôi, nhưng để lọc comments được nhúng trong mỗi blog, tôi phải tải tất cả chúng vào bộ nhớ (truy xuất tất cả vào một mảng Ruby) và lặp qua từng nhận xét, trả lại những cái khớp với một tiêu chí cụ thể.

Nỗ lực của tôi để lọc tài liệu được nhúng bằng ký hiệu chấm là không thành công và mang lại tất cả tài liệu phụ.

Có cách nào tốt hơn để nhận MongoDB lọc chúng cho tôi hay tôi nên từ bỏ bản thân mình cho các hiệp hội quan hệ? (Kéo lại tất cả tài liệu được nhúng và lọc theo cách thủ công sẽ quá chuyên sâu về lâu dài)

Trả lời

22

Hiện không có cách nào để lọc trên tài liệu được nhúng theo cách bạn mô tả. Sử dụng ký hiệu chấm cho phép bạn kết hợp trên tài liệu được nhúng, nhưng toàn bộ tài liệu, phụ huynh và tất cả, sẽ vẫn được trả lại. Cũng có thể chọn trường nào sẽ được trả lại, nhưng điều đó cũng không thực sự giúp ích cho trường hợp của bạn.

Chúng tôi có trường hợp "bộ sưu tập ảo", sẽ triển khai chức năng mong muốn; cảm thấy tự do để bỏ phiếu về nó:

http://jira.mongodb.org/browse/SERVER-142

Trong khi đó, có lẽ bạn nên đối xử bình luận như bộ sưu tập của riêng mình. Nói chung, nếu bạn cần phải làm việc với một tập dữ liệu nhất định, hãy biến nó thành một bộ sưu tập. Nếu nó được hình thành tốt hơn như là một phần của một số bộ khác, tốt hơn là nhúng.

+0

Cảm ơn kb - đã tự mình chuyển sang bộ sưu tập, dường như đang hoạt động tốt cho đến nay; chỉ cần nhấn mạnh kiểm tra nó một chút. – kez

+0

Tuyệt. Nó vẫn sẽ hiệu quả. –

+13

Không phải là "bộ sưu tập ảo" là một yêu cầu quá lớn đối với yêu cầu rất cần thiết này? Tôi chỉ tò mò - là khả năng trả lại chỉ một tài liệu nhúng cụ thể không được phát triển bởi vì nó không cần thiết hay vì nó phức tạp? – idophir

Các vấn đề liên quan