如何将数组中对象的字段值从字符串改为字符串数组

avkwfej4  于 2022-11-03  发布在  Go
关注(0)|答案(2)|浏览(164)

我有一个这样的文档结构:

{
    "_id": "...",
    "shop": "pepe",
    "fruits": [
      {
        "name": "banana",
        "taste": "sweet",
      },
    ]
}

现在我想将fruits.taste的类型更改为如下数组:"taste": ["sweet"]
所以结果应该是这样的:

{
    "_id": "...",
    "shop": "pepe",
    "fruits": [
      {
        "name": "banana",
        "taste": ["sweet"],
      },
    ]
}

我尝试在mongo playground查询中这样做,但不起作用:

db.getCollection('shops')
  .find()
  .forEach(function(document) {
   db.shops.update(
      { _id: document._id },
      { $set: { "document.fruits.$[].taste": [document.fruits.$.taste] } }
   );
})

如何在数组中的对象中将值从字符串更改为字符串数组?
谢谢你的帮助!

mtb9vblg

mtb9vblg1#

这里有一种方法可以做到这一点,即在update中使用管道。

db.shops.update({
  "fruits.taste": {
    "$exists": true
  }
},
[
  {
    "$set": {
      "fruits": {
        "$map": {
          "input": "$fruits",
          "as": "fruit",
          "in": {
            "$mergeObjects": [
              "$$fruit",
              {"taste": ["$$fruit.taste"]}
            ]
          }
        }
      }
    }
  }
],
{"multi": true}
)

mongoplayground.net上试试。

v2g6jxz6

v2g6jxz62#

查询

  • 您需要引用现有字段,并使用$taste,因此您需要进行管道更新
  • Map到fruts上,并将taste值放入[]

Playmongo

shops.update(
{},
[{"$set": 
   {"fruits": 
     {"$map": 
       {"input": "$fruits",
        "in": {"$mergeObjects": ["$$this", {"taste": ["$$this.taste"]}]}}}}}],
{"multi": true})

相关问题