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

Phân trang MongoDB trên mảng - Kiểm tra xem $ Slice có đến đầu mảng hay không

Một cách để làm là sử dụng $ cond nhà điều hành:

Truy vấn:

let inputPosition = -70
let positionConverted = -position // 70
let maxNumber = 1000

db.collection.aggregate([
    {
      $project: {
        comments: {
          $slice: [ "$comments",
            { $cond: [ { $gte: [ { $size: "$comments" }, positionConverted ] }, inputPosition, maxNumber ] }, 5 ] }
      }
    }
  ])

Kiểm tra: mongoplayground

Giải thích:

Vì vậy, cú pháp của $ slice {$ slice:[, , ]} từ đó nếu bạn chuyển một giá trị lớn hơn kích thước của mảng cho thì bạn sẽ nhận được một mảng trống trong phản hồi.

Ở đây chúng tôi đang sử dụng $ cond để gửi có điều kiện một trong hai giá trị của inputPosition hoặc giá trị của maxNumber thành . Ngoài ra, tôi có một giá trị được mã hóa cứng là maxNumber thành 1000 nhưng nói chung, tất cả phụ thuộc vào sự lựa chọn của bạn - Bạn có thể sử dụng một số nhỏ hơn, điều đó không quan trọng, số đó phải là giá trị lớn hơn kích thước mảng của bạn, Bạn cũng có thể kích thước của mảng + 1 nhưng thay vì thực hiện thao tác đó nếu bạn cho rằng mảng của mình luôn nhỏ hơn 1000 thì hãy sử dụng trực tiếp 1000 .

Tham khảo: $ slice



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Plugin thay thế cho plugin river-mongodb đàn hồi, được hỗ trợ bởiasticsearch 2.2.0 là gì?

  2. Cập nhật mảng Mongo hoặc đẩy vào một truy vấn

  3. Làm cách nào để lấy các tài liệu con từ một mảng?

  4. Ngoại lệ MongoDB:Máy chủ báo cáo phiên bản dây 0, nhưng phiên bản libmongoc yêu cầu ít nhất 3

  5. Không thể giải quyết từ chối lời hứa và gửi mảng dưới dạng phản hồi