我在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
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在数组中插入新记录(如果不存在),如果该数组中存在记录,则更新该数组记录.下面是我的MongoDB查询.
db.push.update(
{ _id: 5 },
{ $push: { "quizzes": {"wk" : 6.0,"score" : 8.0},"play": {"wk" : 6.0,"score" : 8.0} } }
)
Run Code Online (Sandbox Code Playgroud)
每当我执行此查询时,它会在数组中插入新记录但我想如果记录存在则更新该数组.
San*_*was 11
用$addToSet
而不是$push
.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
Run Code Online (Sandbox Code Playgroud)
编辑:
对于数组字段中的条件子文档更新,没有简单的内置方法,具体属性.但是,一个小技巧可以通过按顺序执行两个命令来完成工作.
例如:如果我们想quizzes
用对象更新字段{ "wk": 7.0, "score": 8.0 }
,我们可以分两步完成:
第一步: $pull
从quizzes
数组中输出子文档"wk": 7.0
.(如果找不到匹配的子文档,则没有任何反应).
db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Run Code Online (Sandbox Code Playgroud)
第2步: $addToSet
子文档.
db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令组合上述两个更新命令 bulk.find().update()
归档时间: |
|
查看次数: |
2321 次 |
最近记录: |