MongoDB中的位置$运算符似乎不会更新多个文档

时间:2019-03-30 17:32:56

标签: mongodb-query positional-operator

以下是https://docs.mongodb.com/manual/reference/operator/update/positional/#examples

的修改示例
db.students.insert([
   { "_id" : 1, "grades" : [ 85, 80, 80 ] },
   { "_id" : 2, "grades" : [ 88, 90, 92 ] },
   { "_id" : 3, "grades" : [ 85, 100, 90 ] }
])

db.students.updateOne(
   { _id: 1, grades: 80 },
   { $set: { "grades.$" : 82 } }
   { multi: true }
)'

我希望{multi: true}更新多个符合选择器条件的文档。

事实上,以下内容似乎也不起作用:

db.students.insert([
       { "_id" : 1, "grades" : [ 85, 82, 82 ] },
       { "_id" : 2, "grades" : [ 88, 90, 92 ] },
       { "_id" : 3, "grades" : [ 80, 100, 90 ] }
    ])

    db.students.updateOne(
       { _id: 1, grades: 80 },
       { $set: { "grades.$" : 82 } }
       { multi: true }
    )'

我希望将第三份文档更新为{"_id" : 3, "grades" : [82, 100, 90]}

1 个答案:

答案 0 :(得分:1)

您的查询子句为{ _id: 1, grades: 80 },但id:1grades : [ 85, 82, 82 ]。第三个文档不会更新,因为它的_id:3与您的查询子句不匹配。

提示:在运行update之前,执行find以获得可能要更新的内容的预览*。

 db.students.find({ _id: 1, grades: 80 })

* {find将返回所有匹配项,而updateOne将最多更新1个文档,但是至少您会知道查询子句是有效的。