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

Truy vấn phạm vi MongoDB trên toàn bộ giá trị tài liệu được nhúng

Lưu ý lệnh vài dòng dưới đây trong tài liệu bạn đã liên kết:

Điều này cho bạn biết rằng các trường không tồn tại và các trường được đặt thành null sẽ được xử lý đặc biệt.

Để các tài liệu {}{a: null} để tương đương theo thứ tự sắp xếp, thuật toán sắp xếp phải xem xét trường sắp xếp bị thiếu sẽ có mặt và có giá trị null .

Nếu bạn thêm trường bị thiếu một cách rõ ràng, chỉ để xem nó trông như thế nào, thứ tự sẽ có ý nghĩa hơn.

Bộ lọc {tag: { $gte: { baz: MinKey() }}} áp dụng cho {_id: 1, tag: {bar: "BAR"}} về cơ bản là so sánh {baz: MinKey()} với {baz: null, bar: "BAR"} .

Gần đầu tài liệu mà bạn đã liên kết có ghi rằng MinKey nhỏ hơn null , vì vậy đó là thứ tự thích hợp.

CHỈNH SỬA

Nói chung, truy vấn hiệu quả nhất khi bản thân tên trường không phải là dữ liệu. Về cơ sở dữ liệu dạng bảng, cột nào sẽ chứa "baz"?

Một thay đổi nhỏ trong lược đồ sẽ đơn giản hóa loại truy vấn này. Thay vì {tagname: tagvalue} , sử dụng {k:tagname, v:tagvalue} . Sau đó, bạn có thể lập chỉ mục tag.k và / hoặc tag.v và truy vấn trên tag.k để tìm tất cả các tài liệu có thẻ "baz", việc truy vấn thẻ bằng các phép toán bất đẳng thức sẽ hoạt động trực quan hơn.

db.collection.find({"tag.k":{$gte:"baz"}})

Đối sánh chính xác có thể được thực hiện với elemMatch như

db.collection.find({tag: {$elemMatch:{k:"baz",v:"BAZ"}}})

Nếu bạn thực sự cần các tài liệu trả về chứa {tagname: tagvalue} , $arrayToObject toán tử tổng hợp có thể làm điều đó:

db.collection.aggregate([
  {$match: {
      "tag.k": {$gte: "baz"}
  }},
  {
    $addFields: {
      tag: {$arrayToObject: [["$tag"]]}
  }}
])

Sân chơi




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tốt nhất để xử lý kết nối toàn cầu của Mongodb trong NodeJs là gì

  2. nhận các Giá trị riêng biệt với Dữ liệu được Sắp xếp

  3. Làm cách nào để chạy các lệnh MongoDB bằng cách truy vấn bộ sưu tập $ cmd đặc biệt?

  4. Node.js lắng nghe sự thay đổi của MongoDB

  5. Làm cách nào để anh ấy xử lý các yêu cầu ưu tiên trong express / nodejs?