2011-11-16 32 views
66

Nếu tôi có một bản ghi như thế này;mongodb tìm thấy bởi nhiều mục mảng

{ 
    "text": "text goes here", 
    "words": ["text", "goes", "here"] 
} 

Làm cách nào để khớp nhiều từ trong MongoDB? Khi kết hợp một từ tôi có thể làm điều này;

db.find({ words: "text" }) 

Nhưng khi tôi thử điều này cho nhiều từ, nó không hoạt động;

db.find({ words: ["text", "here"] }) 

Tôi đoán rằng bằng cách sử dụng một mảng, nó sẽ cố khớp toàn bộ mảng với mảng trong bản ghi chứ không phải khớp với nội dung riêng lẻ.

Trả lời

112

Phụ thuộc vào việc bạn đang cố gắng tìm tài liệu ở đâu words chứa cả hai yếu tố (texthere) sử dụng $all:

db.things.find({ words: { $all: ["text", "here"] }}); 

hoặc một trong hai trong số họ (text hoặc here) sử dụng $in:

db.things.find({ words: { $in: ["text", "here"] }}); 
+3

$ tất cả là những gì tôi đang tìm kiếm, cảm ơn. :) –

+3

Điều này đã giúp tôi quá, tôi cần nó để tìm một ID đối tượng trong một mảng, và ở đâu đó như $ trong: [ObjectId ("4f9f2c336b810d0cf0000017")] thất bại, $ in: ["4f9f2c336b810d0cf0000017"] làm việc – jbnunn

+0

bạn cũng có thể tìm cách khác để làm điều này trong trang hỗ trợ mangodb http://docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents và http://docs.mongodb.org/manual/core/indexes/# multikey-indexes –

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