gpt4 book ai didi

node.js - MongoDB $addToSet 到对象的深层嵌套数组

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:07 25 4
gpt4 key购买 nike

下面是我的数据结构。

{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"name" : "Michael",
"payments" : [
{
"month": "2018/09"
"amount": "20"
}
]
},
]
}

我想将以下对象推送到 Michael 的付款

{ 
"month": "2018/09",
"amount": "5000"
}

在这种情况下,我想要的是覆盖对象,因为 month: "2018/09" 已经存在。如下所示:

{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"name" : "Michale",
"payments" : [
{
"month": "2018/09"
"amount": "5000"
}
]
},
]
}

而且,如果我想推送付款中不存在同一月份的对象,我想将此对象添加到付款中。

{ 
"month": "2018/10",
"amount": "2000"
}

所以预期的结果是

{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"payments" : [
{
"month": "2018/09"
"amount": "5000"
},
{
"month": "2018/10"
"amount": "2000"
}
]
},
]
}
<小时/>

我尝试了如下,但它不起作用。每次我尝试时,我的代码都会生成重复的新 month 对象。我怎样才能正确地做到这一点?

Rooms.update(
{
_id: "room1",
"members._id": "member1",
"members.$.payments": {
$not: {
$elemMatch: {
month: req.body.month
}
}
}
},
{
$addToSet: {
"members.$.payments": {
month: req.body.month,
amount: req.body.value
}
}
},
{ multi: true }, function (err, result) {
console.log(result)
}
)

最佳答案

您可以使用以下命令以月份或金额进行添加,无需重复

Rooms.update(
{
_id: "room1",
"members._id": "member1"
},
{
$addToSet: {
"members.$.payments": {
month: req.body.month,
amount: req.body.value
}
}
},function (err, result) {
console.log(result)
}
)

关于node.js - MongoDB $addToSet 到对象的深层嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52294572/

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