MongoDB 更新文档属性字符串数组 $push(如果不存在)$pull(如果存在)

问题描述 投票:0回答:1
DATA = [
  {
    name: 'one',
    example: {
      arrayOfStrings: ['one', 'two', 'three']
    }
  }
]

db.getCollection('test').update(
  {name: 'one'},
  [
    {
      // From access.roles, if value is not there, then add it to array of strings.
      // if it is there, remove it from the array of strings.
    }
  ]
)

类似于下面的内容,但是可以工作。

{
  $cond: [
    {
      $in: ['one', '$example.arrayOfStrings']
    },
    {$pull: {'$example.arrayOfStrings': 'one'}},
    {$push: {'$example.arrayOfStrings': 'one'}},
  ]
}
mongodb aggregate
1个回答
0
投票

example.arrayOfStrings
数组中确实存在“one”时,使用
$filter
运算符将其从数组中删除。

否则,请通过在数组中提供“one”来使用

$concatArrays
运算符来执行将元素添加到数组中的操作。

db.collection.update({
  name: "one"
},
[
  {
    $set: {
      "example.arrayOfStrings": {
        $cond: [
          {
            $in: [
              "one",
              "$example.arrayOfStrings"
            ]
          },
          {
            $filter: {
              input: "$example.arrayOfStrings",
              cond: {
                $ne: [
                  "$$this",
                  "one"
                ]
              }
            }
          },
          {
            $concatArrays: [
              "$example.arrayOfStrings",
              [
                "one"
              ]
            ]
          }
        ]
      }
    }
  }
])

演示@Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.