mongoose 如何在mongodb文档中添加元素到数组中,如果存在空数组,否则在updateMany中设置$?

pod7payv  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(108)

所以我有这个东西

{ name: "sunil"
  tags:null
}
{ name: "radha"
  tags:[{k:"max",v:"4"},{k:"min",v:"3"}]
}

我想更新这两个文件与一些新的标签对象,我想$设置,如果标签字段为空和$推,如果它不是。这是所有的虚拟数据,但结构是相同的,为我的数据以及。我在updateMany中没有看到任何选项可以做到这一点。你能告诉我如何创建一个可以做到这一点的查询吗?
我尝试了updateMany与iframe操作符,但它不工作的插入$iframe,因为它是数据库。我检查了其他问题,但没有一个符合我的场景。

svmlkihl

svmlkihl1#

你需要一个带有聚合管道的更新查询来按条件添加元素:
1.如果tags字段为null、missing或undefined,则在字段中设置一个包含新元素的数组。
1.否则,通过$concatArrays将元素添加到tags字段中。

db.collection.update({},
[
  {
    $set: {
      tags: {
        $cond: {
          if: {
            $in: [
              {
                $type: "$tags"
              },
              [
                "null",
                "missing",
                "undefined"
              ]
            ]
          },
          then: [
            {
              k: "new k",
              v: "new v"
            }  // Your new element
          ],
          else: {
            $concatArrays: [
              "$tags",
              [
                {
                  k: "new k",
                  v: "new v"
                } // Your new element
              ]
            ]
          }
        }
      }
    }
  }
],
{
  multi: true
})

Demo @ Mongo Playground

相关问题