收藏
回答

command怎么更新数组

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 需求 工具 wx8df00821371cf936 2.3.0

- 需求的场景描述(希望解决的问题)

记录中一个字段为数组形式,我需要更新时在这个数组中删除某一个元素怎么操作?

请问下面的代码正确吗?还是说要取出值后再更新进去?

let db = cloud.database();
let _ = db.command;
await db.collection('users').doc(e.userInfo.openId).update({
    _gis:_.remove(e._gid)
})

- 希望提供的能力

教程中没有相关介绍,希望得到解答正确的操作。

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

3 个回答

  • 树影下的月光
    树影下的月光
    2018-10-18

    我现在也遇到这个问题,但是这样更新的数组,如果有很多人同时提交岂不是乱套了

    2018-10-18
    赞同
    回复
  • 半寸灰
    半寸灰
    2018-10-16

    就是咯 取出 数组 再操作数组  再更新数组

    2018-10-16
    赞同
    回复 2
    • i
      i
      2018-10-16

      这样操作相当多了对数据库的执行步骤,不知道有没有一步操作完。

      2018-10-16
      回复
    • 半寸灰
      半寸灰
      2018-10-16回复i

      没有

      2018-10-16
      回复
  • 隔壁王二狗狗狗狗
    隔壁王二狗狗狗狗
    2018-10-16

    你这样写只能更新对象,官方并没有给出可以更改具体数组元素的api

    2018-10-16
    赞同
    回复 9
    • i
      i
      2018-10-16

      _gis:_.push(e._gid)可以对数组_gis添加元素,官方解释里面好像只有从头部和尾部添加去除元素,没有移除指定的元素呢,像下面这样

      _gis:_.remove(e._gid)


      2018-10-16
      回复
    • 隔壁王二狗狗狗狗
      隔壁王二狗狗狗狗
      2018-10-16回复i

      对的 只能这样 我现在都是先把数组从数据库拿回来然后更新然后再通过api更新整个数组

      2018-10-16
      回复
    • i
      i
      2018-10-16回复隔壁王二狗狗狗狗

      我发现我不知道怎么去删除指定元素,需要for循环来删除吗?

      2018-10-16
      回复
    • 隔壁王二狗狗狗狗
      隔壁王二狗狗狗狗
      2018-10-16回复i

      不要想着直接从数据库操作

      可以先wx.collection('').where({

      }).get()拿回数组

      var arr=''

      然后在本地操作arr

      这个相信不用我说了吧

      操作完之后你的这个arr就是更新完成的了

      然后再wx.collection('').where({

      }).updata({

      })记住这里直接将你刚才更新完的数组整个放进去,这样你的数组就更新完成了

      因为官方对数组的操作比较局限化 所以不可能像你说的直接操作比如data:{

      arr[0]:"xxxx"

      }这样是行不通的

      2018-10-16
      回复
    • i
      i
      2018-10-16回复隔壁王二狗狗狗狗

      我知道你的意思,因为不懂也是在网上找了一些信息。网上有如

      Array.prototype.remove = function (val)

      但论坛上也有说不能这样定义。所以我定义一个函数来得到新的数组,如下

      async function ArrayRemove(array, value) {
        let k = -1;
        for (let i = 0; i < array.length; i++) {
          if (array[i] == value) {
            k = i;
            break;
          }
        }
        if (k > -1) {
          return array.splice(i, 1);
        } else {
          return array;
        }
      }

      如你的方法,上面的array是用数据库get得到,再用数据库update这个新array

      不知道正确不正确

      2018-10-16
      回复
    查看更多(4)
登录 后发表内容