gpt4 book ai didi

node.js - Mongodb 用不同的值更新多个文档

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:28 26 4
gpt4 key购买 nike

我一直在尝试将 updatemany 与 mongoose 一起使用。我想使用对象数组更新数据库中的值。

[
{
"variantId": "5e1760fbdfaf28038242d676",
"quantity": 5

},
{
"variantId": "5e17e67b73a34d53160c7252",
"quantity": 13
}
]

我想使用variantId作为过滤器。模型架构为:

let variantSchema = new mongoose.Schema({
variantName: String,
stocks: {
type: Number,
min: 0
},
regularPrice: {
type: Number,
required: true
},
salePrice: {
type: Number,
required: true
}
})

我想使用variantId过滤模型,然后减少库存。

最佳答案

由于您需要使用多个条件更新多个文档,因此 .updateMany() 将不起作用 - 仅当您需要更新具有相同值的多个文档时,它才会起作用,请尝试以下查询,它将帮助您在一次数据库调用中完成此操作:

const Mongoose = require("mongoose");

let variantSchema = new mongoose.Schema({
variantName: String,
stocks: {
type: Number,
min: 0
},
regularPrice: {
type: Number,
required: true
},
salePrice: {
type: Number,
required: true
}
})

const Variant = mongoose.model('variant', variantSchema, 'variant');

let input = [
{
"variantId": "5e1760fbdfaf28038242d676",
"quantity": 5

},
{
"variantId": "5e17e67b73a34d53160c7252",
"quantity": 13
}
]

let bulkArr = [];

for (const i of input) {
bulkArr.push({
updateOne: {
"filter": { "_id": Mongoose.Types.ObjectId(i.variantId) },
"update": { $inc: { "stocks": - i.quantity } }
}
})
}

Variant.bulkWrite(bulkArr)

引用: MongoDB-bulkWrite

关于node.js - Mongodb 用不同的值更新多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com