在下面的示例中,我有一家名为Colors Company的公司,它拥有许多商店
{
_id: ObjectId("78391283"),
name: "Colors company",
shops: [
{shopID: ObjectId("123456a1cb"), income: 0},
{shopID: ObjectId("2a1cb67890"), income: 0},
{shopID: ObjectId("2a1cb010111"), income: 0},
...
],
}
我需要:1-在shops数组上循环,使用{parsedBody.shopID}找到请求的数组2-将“shop.$.income”中存储的金额用作数字2-使用{parsedBody.amountToAdd}增加收入
这是POST请求的parsedBody:
{
companyID: "78391283",
shopID: "123456a1cb",
amountToAdd: 200,
}
我用的是Next js 13。
谢谢你的帮助!
我尝试过的:
const ObjectId = require("mongoose").Types.ObjectId;
Shops.findOneAndUpdate(
{ _id: parsedBody.shopID},
{
set: {
// <-- missing loop here
"shops.$.income": { parsedBody.amountToAdd + income }
}
}
)
我希望遍历商店数组并更新收入字段。
2条答案
按热度按时间u3r8eeie1#
选项1:这似乎是一个简单的选项mongoDB 3.6+
Playground1
选项2:使用更新/聚合mongoDB 4.2+
Playground2
选项3:另一个简单选项,警告:当shopID在shops数组中不应出现多次时,需要使用此选项,因为它将只更新第一个找到的shop元素,如果同一文档中有多个元素具有相同的shopID,则不会更新这些元素。
Playground3
neskvpey2#
在数据库设计中,应将“公司”文档中的“收入”字段移到“商店”文档中,以便更新不同商店的不同收入。