2011-12-17 30 views
7

Hãy nói rằng tôi có một tài liệu như thế này:MongoDB Truy vấn cho đối tượng sở hữu trong danh sách

{ 
    _id: "cow", 
    comments: [ 
     {user: "karl", comment: "I like cows.", at: /*a date*/}, 
     {user: "harry", comment: "Cows are the best.", at: /*a date*/} 
    ] 
} 

Bây giờ tôi muốn thu thập tất cả các ý kiến ​​mà "karl" còn lại trong db của tôi. Hoặc chỉ những người vào một ngày nhất định. Các "comments" được lập chỉ mục, làm thế nào tôi có thể truy vấn cho điều đó?

Trả lời

9

Cái gì như:

db.foo.find({"comments.user":"karl", "comments.at":{$gt:{dateObject}}); 

đã không được thử nghiệm nhưng bạn có được ý tưởng; bạn có thể đi sâu vào các mục như vậy.

tôi khuyên bạn nên đi qua chỗ này vì nó khiến bạn qua rất nhiều bài hướng dẫn tương tác: Interactive Tutorial

6

Bạn nên sử dụng $ elemMatch để phù hợp với nhiều điều kiện trong cùng một doc.

Cái gì như:

db.foo.find({comments: {"$elemMatch": {user: "karl", at: {$gt:{dateObject}}}}) 

Xem here để biết thêm chi tiết.

+0

liên kết của bạn dẫn đến màn hình đăng nhập hợp lưu .... – drevicko

+1

trang web mongodb đã thay đổi url tài liệu của họ - dù sao tôi cũng đã cập nhật câu trả lời của mình với nội dung nào đó có liên quan trên trang web mới. –

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