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

loại bỏ các giá trị 0 nếu 0 được theo sau bởi> =1 khỏi các mảng trong MongoDB

Một cách tiếp cận là cách này:

db.collection.aggregate([
   {
      $set: {
         data: {
            $let: {
               vars: {
                  val: "$data_start",
                  prev: { $concatArrays: [[null], "$data_start"] } // shift values by one element 
               },
               in: {
                  $map: {
                     input: { $range: [0, { $size: "$$val" }] },
                     as: "idx",
                     in: {
                        $cond: {
                           if: {
                              $and: [
                                 { $eq: [{ $arrayElemAt: ["$$val", "$$idx"] }, 0] }, // is 0
                                 { $eq: [{ $arrayElemAt: ["$$val", "$$idx"] }, { $arrayElemAt: ["$$prev", "$$idx"] }] } // is equal to previous
                              ]
                           },
                           then: null,
                           else: {
                              data_start: { $arrayElemAt: ["$$val", "$$idx"] },
                              time_start: { $arrayElemAt: ["$time_start", "$$idx"] }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   },
   {
      $set: {
         data: {
            $filter: {
               input: "$data",
               cond: "$$this"// -> removes null's from array
            }
         }
      }
   }
])

Có thể bạn phải tinh chỉnh điều kiện và / hoặc đảo ngược vòng lặp, tức là input: { $range: [{ $size: "$$val" }, 0, -1] }

Sân chơi Mongo



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. sắp xếp mongodb và truy vấn regex theo cách hiệu quả

  2. Tổng quan về Lập chỉ mục cơ sở dữ liệu cho MongoDB

  3. Giữ một tài liệu duy nhất trong bộ sưu tập mongoDB bằng mongoose

  4. Làm cách nào để tiếp tục MongoDB ChangeStream ở tài liệu đầu tiên và không chỉ thay đổi sau khi tôi bắt đầu nghe

  5. Mapreduce trong trình điều khiển gốc ruby ​​mongodb