mongodb - 如何更新文档中数组中的字段

标签 mongodb go

我有一个具有以下结构的文档。我想在数组 files 中插入一个新文件,然后将所有其他文件状态设置为“INACTIVE”。插入后,我正在尝试使用以下代码更新数组的其他文件,但它无法匹配。

{
  {
 "id":"fafsahjaf867rwhrbjw",
 "files" : [
            {"name": "123", status:"ACTIVE"},
            {"name": "124", status:"ACTIVE"},
            {"name": "125", status:"ACTIVE"},
            {"name": "126", status:"ACTIVE"},
           ] 
   },
}

    query = bson.M{ "id": productId,
    "files": bson.M{
        "$not": bson.M{"$elemMatch": fileObj}}}

    update = bson.M{
    "$set": bson.M{
        "files.$.status": "INACTIVE",
    },
  }

最佳答案

如果你有 Mongo >= 3.6,这里有一个例子来编辑除最后一个名称为 126 之外的所有内容。

db.collection.update(
  { "id" : "fafsahjaf867rwhrbjw", "files.name": "126" },
  { "$set": { "files.$[elem].status": "INACTIVE" } },
  { "arrayFilters": [{ "elem.name": {$ne : "126"} }], "multi": true }
)

How to Update Multiple Array Elements in mongodb 得到了解决方案

关于mongodb - 如何更新文档中数组中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54490828/

相关文章:

javascript - 通过reddit排名算法对mongodb进行排序

javascript - 从 MongoDB 中的嵌套数组中查找公共(public)属性

mongodb - 如何在 Anaconda 中运行 MongoDB?

go - regexp.FindAll* 的最大行长度?

windows - Golang Docker容器无法在Windows Home上启动

node.js - 如果距离上次更新的时间是一定的持续时间,则使用 mongoose 进行更新

java - 如何使用Java中的聚合框架将时间戳转换为日期

Go调度器和CGO : Please explain this difference of behavior?

go - 将一个模板渲染到另一个模板中,而无需每次都解析它们

csv - 在 GO 错误中写入 csv