评论

# 使用小程序云开发API更新数组中的单个数组元素

使用小程序API更新数组中的单个元素

使用小程序云开发API更新数组中的单个数组元素

看了看mongoDB的更新数据方式,找到了解决办法,解决方法如下,亲测可用:

第一种方法:使用位置操作符$

  • 代码,条件更新写在云函数中
    

  • test_api集合原始数据如下
    

  • 在云函数中执行1中的代码,数组users中id为1001的用户添加了一个新的属性test
    

  • 原理分析
    

    where条件是查找数组中id属性为1001的用户

    update中的使用’users.$.test’: ‘test’

    注意里面的$符号,在mongoDB中,这个符号叫做位置操作符,代表数组的下标,如下引自《mongoDB实战》

第二种方法:直接使用数组下标

  • 云函数代码
  • test_api集合原始数据如下
  • 代码执行后

相对于第一种方法,这种方法更加简单,只不过users.1.test这种写法有点颠覆js和java中的属性书写规则,让人感觉怪怪的,在mongoDB中,也支持点数字这种写法。

  • 一个可能的疑惑
    可不可以写作’users[1].test’:‘test’,测试结果如下:


    可以看到’user[1]'无法被识别为数组的第二个元素,而是作为了属性名新增了一个属性,结论:必须写成”点数字“不能写成“中括号”

结论:

经过测试,使用这两种种方法可以更新数组中的一个元素。
方法一适合在不知道数组元素下标的情况下根据查询条件更新元素;
方法二适合在知道数组元素下标的情况下更新元素;
当然也存在既知道元素下标也可以通过属性查到的情况,想用哪个就看心情了-.-
但是暂未找到查询返回数组中的一个元素的方法,再探索探索吧 ——。——

最后一次编辑于  2019-03-06  
点赞 21
收藏
评论

12 个评论

  • 老张
    老张
    2019-03-07

    谢谢楼主的尝试,一直不知道已经都支持这样的操作了。

    云开发的文档编写员可以拖出去砍了了。

    2019-03-07
    赞同
    回复 5
    • H
      H
      2019-03-07

      如果项目已经在使用云开发了,使用的是云开发数据库,不想换库,非常建议去了解一下mongoDB数据库的增删改查,这样解决问题可以更自由一些,也许会有新发现,而且说不定会爱上nosql数据库呦^_^

      2019-03-07
      回复
    • 老张
      老张
      2019-03-07回复H

      一直在用mongo,只是没想过去试试文档里没说过的东西。

      如果mongo的聚合以及geo都支持的话,我们二话不说,全部向云开发迁移。

      2019-03-07
      回复
    • 2019-08-22
      文档编辑不知在干什么! 看来mongo的很多东西可以在云数据库上用,感谢!
      2019-08-22
      回复
    • 老张
      老张
      2019-08-22回复H
      楼主,不知道查询是否支持数组/对象数组查询了?比如:"arrayObject.filed" : "value"
      2019-08-22
      回复
    • H
      H
      2019-08-22

      最近转战别的东西了,小程序有一段时间没弄了,这个可以写个demo测测 >-<

      2019-08-22
      回复
  • Real苏先生
    Real苏先生
    2019-03-06

    $默认是对第一条数据做操作吗

    2019-03-06
    赞同
    回复 8
    • H
      H
      2019-03-06

      $的值是根据查询条件由数据库自动解析确定的,查询条件查到的是数组中的哪个元素,$就代表哪个元素的下标,你可以尝试把where条件中的‘users.id’改成1002,那么操作的就是第二条数据了^-^

      2019-03-06
      回复
    • Real苏先生
      Real苏先生
      2019-03-06回复H

      原来如此  我再一看 发现我看错了 尴尬呦

      2019-03-06
      回复
    • H
      H
      2019-03-06

      如果,where中不写查询条件,不指定要更新哪个位置的元素,直接使用位置操作符进行操作,会报错,报错信息如下:



      报错的意思是:位置运算符没有从查询中找到所需的匹配。如果要更新第一个元素,也是要写查询条件的,目前的结论是:不会默认对第一条数据做操作,必须在where条件中指定精确的查询条件

      2019-03-06
      回复
    • Real苏先生
      Real苏先生
      2019-03-06回复H

      好嘞 感谢您

      2019-03-06
      回复
    • H
      H
      2019-03-06回复Real苏先生

      又找到了一个新方法,你可以参考一下方法2

      2019-03-06
      回复
    查看更多(3)

正在加载...

登录 后发表内容