MongoDB 中的位置 $ 运算符似乎没有更新多个文档
The positional $ operator in MongoDB does not seem to update multiple documents
以下是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]}
您的查询子句是 { _id: 1, grades: 80 }
但 id:1
有 grades : [ 85, 82, 82 ]
。第三个文档将不会更新,因为它有 _id:3
与您的查询子句不匹配。
专业提示:在 运行 update
之前执行 find
以预览可能更新的内容*。
db.students.find({ _id: 1, grades: 80 })
*find
将 return 所有匹配项,而 updateOne
将最多更新 1 个文档,但至少您会知道您的查询子句有效。
以下是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]}
您的查询子句是 { _id: 1, grades: 80 }
但 id:1
有 grades : [ 85, 82, 82 ]
。第三个文档将不会更新,因为它有 _id:3
与您的查询子句不匹配。
专业提示:在 运行 update
之前执行 find
以预览可能更新的内容*。
db.students.find({ _id: 1, grades: 80 })
*find
将 return 所有匹配项,而 updateOne
将最多更新 1 个文档,但至少您会知道您的查询子句有效。