我在MongoDB中有以下updateMany个操作:

myCollection.updateMany({
    _id: {
        $in: myIds,
    }
}, [
    {
        $set: {
            "nested.field": {
                $arrayToObject: {
                    $filter: {
                        input: {
                            $objectToArray: "nested.field",
                        },
                        cond: {
                            $gte: [
                                "$$this.k",
                                new Date().toISOString()
                            ],
                        }
                    }
                }
            }
        }
    }
])

基本上,它所做的是过滤掉$.nested.field内关键字小于当前日期的所有元素.

我试图将其放入批量操作(与其他操作一起),但得到一个错误(当与简单的updateMany一起使用时,它可以正常工作).

const bulkOp = myCollection.initializeUnorderedBulkOp();

bulkOp.find({
    _id: {
        $in: myIds
    },
}).update([
    {
        $set: {
            "nested.field": {
                $arrayToObject: {
                    $filter: {
                        input: {
                            $objectToArray: "nested.field",
                        },
                        cond: {
                            $gte: [
                                "$$this.k",
                                new Date().toISOString()
                            ],
                        }
                    }
                }
            }
        }
    }
]);


await bulkOp.execute();

执行上面的命令时,我得到以下错误:MongoBulkWriteError: $objectToArray requires a document input, found: string.

如何在批量操作中正确执行上述操作?

推荐答案

对于$objectToArray,您需要提供一个开头带有$符号的字段引用,如

{ $objectToArray: "$nested.field" }

否则,MongoDB将以字符串的形式读取值并引发您所描述的错误.

Node.js相关问答推荐

node 模块错误:类型参数OT具有循环约束''

Mongoose抱怨说,整数是数字,而不是整数

我的Node.js应用程序没有将Mongoose方法findByIdAndDelete作为函数进行检测

如何在 JavaScript 中显示多维数组中使用的一维数组的变量名?

当try 将 formData 转换为 express js 时,服务器无法识别 multipart/form-data

为什么这个 module.export 函数如果我直接传递它就不起作用,但如果我将它包装在一个匿名函数中就可以工作

为什么当我使用waitForSelector时 Puppeteer 导致我的测试套件挂起 30 秒,即使我在页面和浏览器上调用关闭?

在快速路由中使用 axios 会在数据字段中返回特殊字符而不是 json

kubernetes 上的 nextjs 无法启动

Electron 模板(Typescript + Webpack)中的这个 Electron Forge ERROR 是什么?

如何使用 node 在 koa.js 中发送响应

如何刷新 youtube-data-api v3 的访问令牌

如何在 Node.js 的 console.log() 中创建换行符

等价于 Node.js 的 Rails 控制台

带有加密的nodejs中的SALT和HASH密码

如何为 node.js 服务器分配域名?

续集findbyid不是一个函数,但显然findAll是

我可以让 node --inspect 自动打开 Chrome

如何断言不为空?

如何修复此错误 TypeError [ERR_INVALID_CALLBACK]: Callback must be a function