【问题标题】:Mongo DB aggregation on array数组上的MongoDB聚合
【发布时间】:2021-04-28 07:17:12
【问题描述】:

我正在尝试将元素添加到文档 MongoDB 集合中的数组,其中聚合(非定期更新)匹配特定名称 但我找不到正确的语法

例如:

{"name":"TEST1","department":"T1","skills":["JS","HTML"],"expY":5}
{"name":"TEST2","department":"T2","skills":["Java","CSS"],"expY":3}

我想添加到 skills 数组“CSS”我尝试使用排序、匹配、组、项目、($add、$push 等),这些语法都不起作用

db.collection.aggregate([ 
   { $match : { name : "TEST1" } },
   HERE I DONT KNOW WHAT IS THE RIGHT SYNTAX TO ADD ELEMENT TO skills array
])

【问题讨论】:

    标签: arrays database mongodb aggregation-framework aggregate


    【解决方案1】:

    如果我正确理解了您的问题,您希望匹配名称为“TEST1”的所有文档,然后将“CSS”添加到技能数组中。如果这是正确的,这是一种方法:

    db.collection.aggregate([
      {
        $match: {
          name: "TEST1"
        }
      },
      {
        $project: {
          name: "$name",
          department: "$department",
          expY: "$expY",
          skills: {
            $concatArrays: [
              "$skills",
              [
                "CSS"
              ]
            ]
          }
        }
      }
    ])
    

    Playground

    以下是如何更新您的文档以将“CSS”添加到数组中:

    db.your_collection.update({ name : "TEST1" }, { $push: { skills: 'CSS' } })
    

    【讨论】:

    • 感谢您的回答,它表明它是有效的,但是!当我运行此查询时,它并没有真正改变数组,当我查看 compass / db.collection.find() 时,它会显示原始数组
    • @Carnjaxxofficial 聚合不用于更新。您需要简单的update 命令。我已经更新了我的答案,向您展示如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2020-01-21
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多