gpt4 book ai didi

arrays - 如果存在则更新数组中的元素,否则在 MongoDb 中的该数组中插入新元素

转载 作者:IT老高 更新时间:2023-10-28 13:33:42 26 4
gpt4 key购买 nike

我在 MongoDB 中有一组元素数组,如下所示:

{ 
"_id" : 5,
"quizzes" : [
{
"wk" : 1,
"score" : 10
},
{
"wk" : 2,
"score" : 8
},
{
"wk" : 3,
"score" : 5
}
],
"play" : [
{
"wk" : 2,
"score" : 8
},
{
"wk" : 3,
"score" : 5
}
]
}

如果不存在,我正在尝试在数组中插入新记录,如果该数组中存在记录,则更新该数组记录。下面是我的 MongoDB 查询。

db.push.update(
{ _id: 5 },
{ $push: { "quizzes": {"wk" : 6.0,"score" : 8.0},"play": {"wk" : 6.0,"score" : 8.0} } }
)

每次执行此查询时,它都会在数组中插入新记录,但我希望如果记录存在则更新该数组。

最佳答案

使用 $addToSet而不是 $push.

db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)

编辑:

没有简单的内置方法可以通过特定属性在数组字段中进行条件子文档更新。但是,一个小技巧可以通过依次执行两个命令来完成这项工作。

例如:如果我们想用对象 { "wk": 7.0, "score": 8.0 } 更新 quizzes 字段,我们可以在两步:

Step-1: $pullquizzes 数组中取出子文档 where "wk": 7.0。 (如果没有找到匹配的子文档,什么都不会发生)。

db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)

第 2 步: $addToSet 子文档。

db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)

您可以使用 bulk.find().update() 组合上述两个更新命令

关于arrays - 如果存在则更新数组中的元素,否则在 MongoDb 中的该数组中插入新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888312/

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