0

假设我有以下架构

t = {name: 'John', reviews: [{sid: 1, comment: 'Great', rating: 4}, {sid: 2, comment: 'Awesome', rating: 5}]}
db.teacher.save(t)
db.teacher.find()

现在 sid 2 的学生将评分更新为 4。是否有任何内置操作可以原子地执行此操作?目前我检索整个文档,手动操作评论,然后 $set 整个评论数组。它有效,但感觉有点沉重。我查看了所有原子运算符,其中很多都接近了,但据我所知,它们都没有完全按照我的要求进行。有什么我想念的吗?

4

2 回答 2

1

与许多其他 DBMS 一样,MongoDB 实现了更新命令:

db.teacher.update({'reviews.sid': 2}, {$set: {'reviews.$.rating': 4}}, false, true);

作为旁注,我经常向有 SQL 经验但刚开始使用 Mongo 的人推荐这个备忘单。)

于 2012-06-21T21:04:39.453 回答
0

是的,您可以直接使用$set仅更新您想要的密钥,并使用点表示法引用该密钥。

于 2012-06-21T21:01:23.130 回答