mongodb tìm theo nhiều mục mảng


96

Nếu tôi có một bản ghi như thế này;

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

Làm cách nào để ghép nhiều từ với nó trong MongoDB? Khi kết hợp một từ duy nhấ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ó cố gắng khớp toàn bộ mảng với mảng trong bản ghi, thay vì khớp với các nội dung riêng lẻ.

Câu trả lời:


168

Phụ thuộc vào việc bạn đang cố tìm tài liệu wordscó chứa cả hai phần tử ( texthere) bằng cách sử dụng $all:

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

hoặc một trong hai ( texthoặc here) sử dụng $in:

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

3
Điều này cũng giúp tôi, tôi cần nó để tìm ID đối tượng trong một mảng và nơi mà một cái gì đó như $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] không thành công, $ in: ["4f9f2c336b810d0cf0000017"] đã hoạt động
jbnunn

bạn cũng có thể tìm một cách khác để thực hiện việc này trong trang hỗ trợ mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documentsdocs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai

1
Điều này có tốt hơn việc lặp lại mảng và thực hiện tìm kiếm đơn lẻ () không?
Rohit Nair
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.