sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの配列から0の後に>=1が続く場合は、0の値を削除します

    1つのアプローチはこれです:

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

    条件を微調整したり、ループを逆にしたりする必要があるかもしれません。つまり、input: { $range: [{ $size: "$$val" }, 0, -1] }

    モンゴの遊び場



    1. 電子でmongodbを使用するにはどうすればよいですか?

    2. MongoDB Java Inserting Throws org.bson.codecs.configuration.CodecConfigurationException:クラスio.github.ilkgunel.mongodb.Pojoのコーデックが見つかりません

    3. MongoDB \ Driver \ Exception \ InvalidArgumentExceptionプラットフォームで整数のオーバーフローが検出されました:300000000000

    4. MongoDBストアドプロシージャと同等