MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Trong một trận mongodb $, cách kiểm tra trường MATCHING, thay vì trường EQUALING

Những gì bạn thấy trong kết quả là chính xác. Cách tiếp cận của bạn hơi sai. Nếu bạn muốn có kết quả như mong đợi, thì bạn nên sử dụng phương pháp này:

collection.aggregate([
  {$match:{greetings:{$elemMatch:query}}},
  {$unwind:"$greetings"},
  {$match:{"greetings.hello":"world"}},
]).toArray()

Với điều này, bạn sẽ nhận được kết quả sau:

[
  {greetings:{hello:"world"}},
  {greetings:{hello:"world"}},
  {greetings:{"hello":"world","extra":"data"}
]

Bất cứ khi nào bạn sử dụng aggregation trong MongoDB và muốn tạo một đường dẫn tổng hợp mang lại các tài liệu mà bạn mong đợi, bạn phải luôn bắt đầu truy vấn của mình với giai đoạn đầu tiên. Và cuối cùng thêm các giai đoạn để theo dõi kết quả đầu ra từ các giai đoạn tiếp theo.

Đầu ra của $unwind của bạn giai đoạn sẽ là:

[{
  greetings:{hello:"world"}
},
{
  greetings:{hello:"world", extra:"data"}
},
{
  greetings:{hello:"world"}
},
{
  greetings:{aloha:"mars"}
}]

Bây giờ nếu chúng tôi bao gồm giai đoạn thứ ba mà bạn đã sử dụng, thì giai đoạn này sẽ khớp với greetings khóa có giá trị {hello:"world"} và với giá trị chính xác đó, nó sẽ chỉ tìm thấy hai tài liệu trong đường dẫn. Vì vậy, bạn sẽ chỉ nhận được:

{ "greetings" : { "hello" : "world" } }
{ "greetings" : { "hello" : "world" } }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. ngoại lệ:Kích thước BSONObj:-286331154 (0xEEEEEEEE) không hợp lệ. Kích thước phải từ 0 đến 16793600 (16MB)

  2. Chỉ mục không phân biệt chữ hoa chữ thường MongoDB bắt đầu có vấn đề về hiệu suất

  3. Lấy dữ liệu lồng nhau từ MongoDB vào khung dữ liệu Pandas

  4. Nội dung được biên dịch trước của Heroku không thành công

  5. Không thể chèn dữ liệu vào bộ sưu tập mongodalab