首页 > 解决方案 > 在 MongoDB 中使用 $function new 运算符进行 updateMany 失败

问题描述

我有一个数组树,我想用这种语法更新我的集合中的那个数组

db.documents.updateMany(
  {
    companyId: ObjectId("5f29074048538b6403bc71ab",
    tree: {
      $in: [ObjectId("5f539bf696fa1748fa417b07")],
    },
  },
  [{
    $set: {
      tree: {
        $function: {
          body:
            "function(t) { t.push(ObjectId('5f5494a1d708bda4988d75d4')); return t.filter(v => [ObjectId('5f539bf696fa1748fa417b07')].includes(v))}}",
          args: ["$tree"],
          lang: "js",
        },
      },
    },
  }]
);

为什么我用字符串编写正文函数?因为在 Golang 中我不能使用 bson 的代码,所以我必须使用函数字符串,上面的语法是我在命令行上运行 mongo cli 先尝试然后实现到我的 Go 应用程序

我得到的错误是

Unrecognized expression '$function'

有人有同样的问题吗?还是我使用$function运算符做错了??

标签: mongodbmongodb-query

解决方案


我也有这个问题。在我的场景中,问题是 MongoDB 实例的版本。检查 $function https://docs.mongodb.com/manual/reference/operator/aggregation/function/的文档,它说这些函数是在 4.4 版中引入的 如果您对正在运行的版本有任何疑问,只需执行“db.version()”。我的是 4.2.17


推荐阅读