sql >> Databasteknik >  >> NoSQL >> MongoDB

ta bort 0-värden om 0 följs av>=1 från arrayer i MongoDB

Ett tillvägagångssätt är detta:

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
            }
         }
      }
   }
])

Kanske måste du finjustera villkoret och/eller vända slingan, d.v.s. input: { $range: [{ $size: "$$val" }, 0, -1] }

Mongo lekplats



  1. MongoDb Select Query Issue Whit Regular Expression (börjar med och slutar med)

  2. Laravel App körs inte på xampp eller live server men fungerar bra på php artisan serve

  3. Hitta en eller skapa med Mongoose

  4. Ta bort dokument från en MongoDB-samling baserat på tidpunkten för ett datumfält