收藏
回答

文档描述有误导性, $[] 没有实现 mongodb 对应 的 $[idenfier] 的功能。

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/query-array-object.htmlhttps://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/query-array-object.html


$[] 实现的功能就是数组中的所有元素, 与Mongodb的 $[] 一致。

但文档描述且说是能更新匹配的所有数组元素。 可以误解为$[] 实现了 与Mongodb 中 $[idenfier]的功能。



文档描述 $[] 是更新数组中所有匹配的元素, 而实际运行的结果是, 数组的所有元素。

测试数据

{"_id":"8f75309d62972ff30684c7797085aac7","arr":[10,11,10]}

执行下面的更新
db.collection('xxx').where({
    _id:"8f75309d62972ff30684c7797085aac7",
     scores: 10
}).update({
  data: {
   "scores.$[]": 12  
 }
})



更新后的文档 arr:[12,12,12], 所有数组元素都修改了, 而不是只有值为(匹配)10的数组元素被修改。

https://www.mongodb.com/docs/v4.4/reference/operator/update/positional-filtered/#mongodb-update-up.---identifier--


(真心累, 搞个阉割版本给开发者用,直接花钱买mongodb版权吧, 要不就给云数据库团队加大投资力度, 做mongodb的超集)


回答关注问题邀请回答
收藏

1 个回答

  • 跨商通
    跨商通
    2022-06-01

    验证了,确有此情况。

    建议官方文档修改

    2022-06-01
    有用
    回复
登录 后发表内容