我写了一个简单的updateMany语句,在一个名为products的集合中添加一个now字段. 由于新产品可能没有onSale属性,因此可能会在这些产品现在符合onSale条件时首次添加. 但是,已经onSale的旧产品需要使用onSale:false进行更新.这是我的更新声明.我需要在产品销售结束时更新onSale:false. 我还注意到8.0.3版不再接受{multi:true}.

     public async updateProductsToOnSale(productIds: Array<string>, onSaleStatus: boolean): Promise<UpdateWriteOpResult | undefined> {
        try {
            return await Product.updateMany(
                {
                    _id: {
                        $in: productIds
                    }
                },
                { $set: { onSale: onSaleStatus } },            )
        } catch (error) {
            this.logger.error(error,`Update Failed for productIds  ${productIds}`);
        }
    }


我看到的行为是,有时不更新任何行.然而,当我打印出匹配的计数时,我得到matchedCount:1,即使更新不起作用.此更新是否适用于设置新的待售房产以及现有的待售房产?如果不是,有没有办法通过一次更新Many来实现这一点,或者我是否需要两个,一个用于现有的待售房产,另一个用于设置新的待售房产?谢谢

推荐答案

不,你不需要两个函数,你可以用bulkWrite

let bulkUpdateOps = products.map(function(doc) { // you can warp this into your function
    return {
        "updateOne": {
            "filter": { "_id": doc.id },
            "update": { "$set": { onSale: true} },
            "upsert": true
        }
    };
});

Product.bulkWrite(bulkUpdateOps); // for mongoose model instance

Mongoose bulk write doc

Node.js相关问答推荐

Node.js promise 循环中的所有多个API调用

即使DDB键不存在, node Lambda也不会失败,并返回NULL作为结果

如何防止Socket-io实例化React/Next.js中的两个套接字(当前在服务器*和*客户端实例化)

如何创建具有不同对象类型的数组类型

Rest-Api动态图像路径和Express除非

我如何在nodejs中的路由之间交换令牌

从 Response.json() 返回的 JSON 似乎无效?

NPM 错误:修复upstream 依赖冲突安装 NPM 包(云功能)

用户通过 oauth2 twitter 授权或通过Passport discord后如何重定向到 React/Vue 路由?

使用 .pipe(res) 向客户端发送音频不允许您搜索?

根据 mongoDB 中存在的唯一字符串生成唯一字符串的最佳方法

Sharp JS 依赖关系 destruct 了 Elastic Beanstalk 上的 Express Server

带权限的机密 Rest-Api - 总是 403 - 我做错了什么?

将 myproject/.npmrc 与注册表一起使用

Nodejs 随机免费 tcp 端口

Node.js 中空函数的简写

如何在 node 中转义 shell 命令的字符串?

如何解决 Socket.io 404(未找到)错误?

安装 node 包时可以使用自定义目录名称而不是node_modules吗?

npm install packagename --save-dev 不更新 package.json