簡體   English   中英

將嵌套數組的數據類型從 int64 更改為 mongodb 中的字符串

[英]Change datatype from int64 to string in mongodb for nested array

我有一個像下面這樣的 gc 集合數組,我需要將 CardNumber 的數據類型從 int64 更改為字符串。應該對此集合中的所有記錄完成此操作。我編寫了如下腳本,但在執行時沒有發生任何轉換。任何幫助將不勝感激。

    Eg: GiftCardSale[2 element]
       [0] GiftCardId 62e201874a555cb001d2d723
           CardNumber 5678967546738766 (Int64)
           Amount 20
       [1] GiftCardId 62e201874a555cb001d2d723
           CardNumber 6789879874673829  (Int64)
           Amount 10

    
db.gc
  .find(
    {
      GiftCardSale: {
        $elemMatch: {
          CardNumber: { $exists: true, $type: 18 },
        },
      },
    },
    {
      _id: 2,
    }
  )
  .forEach(function (doc) {
    db.gc.update(
      {
        _id: doc._id,
      },
      {
        $set: {
          'GiftCardSale.$[etl].CardNumber': {
            $toString: '$GiftCardSale.$[etl].CardNumber',
          },
        },
      },
      { arrayFilters: [{ 'etl.CardNumber': { $type: 18 } }], multi: true }
    );
  });

您可以使用單個管道update所有文檔。

db.gc.update({
  "GiftCardSale.CardNumber": {"$type": "long"}
},
[
  {
    "$set": {
      "GiftCardSale": {
        "$map": {
          "input": "$GiftCardSale",
          "as": "sale",
          "in": {
            "$cond": [
              {"$eq": [{"$type": "$$sale.CardNumber"}, "long"]},
              {
                "$mergeObjects": [
                  "$$sale",
                  {"GiftCardSale": {"$toString": "$$sale.CardNumber"}}
                ]
              },
              "$$sale"
            ]
          }
        }
      }
    }
  }
],
{
  "multi": true
})

mongoplayground.net上試試。

您可能想在下面詳細查看我對類似問題的回答。 在 mongodb 中將 int 數據類型更改為 string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM