【发布时间】:2019-02-17 01:25:25
【问题描述】:
下面是我的数据结构。
{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"name" : "Michael",
"payments" : [
{
"month": "2018/09"
"amount": "20"
}
]
},
]
}
我想将下面的对象推送到迈克尔的payments
{
"month": "2018/09",
"amount": "5000"
}
在这种情况下,我想要的是覆盖对象,因为month: "2018/09" 已经存在。如下:
{
"_id" : "room1",
"members" : [
{
"_id" : "member1",
"name" : "Michale",
"payments" : [
{
"month": "2018/09"
"amount": "5000"
}
]
},
]
}
而且,如果我想在付款中推送不存在相同month 的对象,我想将此对象添加到payments。
{
"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)
}
)
【问题讨论】:
-
在这里使用
$ne而不是$not..."members.$.payments": { $elemMatch: { month: { $ne: req.body.month } } } -
在查询部分去掉
members.$.payments中的$。 -
@AnthonyWinzlet 我加了你们的建议,但仍然没有工作......它不再生成重复的对象,但它没有被覆盖。
-
@Veeram 谢谢,我删除了它。但它仍然无法正常工作——不再有重复的对象,但没有被覆盖
-
按预期工作。 $addToSet 不会覆盖元素。
标签: node.js mongodb mongoose mongodb-query