微信小程序云开发对象数组用变量加字符串更新字段数组

今天写微信小程序项目的时候,由于使用的是云开发,数据库中的字段用的是嵌套的对象数组。本来打算在JS中进行增删改查的操作再对整个字段进行更新,但想了想觉得太麻烦,于是想看看官方文档有没有可以直接在云开发数据库进行操作的办法,摸索了一会,还真有可以直接通过云开发进行操作的方法,具体操作如下。

微信小程序开发文档——查询、更新数组/嵌套对象

划到底部,找到了符合我们需要的匹配多重嵌套的数组和对象的代码示例。

如果我们要对如下多重嵌套的对象数组字段进行增删改查的操作。

{
  "root": {
    "objects": [
      {
        "numbers": [10, 20, 30]
      },
      {
        "numbers": [50, 60, 70]
      }
    ]
  }
}

其对应的云开发的操作方法为:

db.collection('todos').doc('test').update({
  data: {
    'root.objects.1.numbers.2': 80
  },
})

那么问题就来了。

可以看到,在官方的示例中,数组的下标是写死的。但我们想要的是不仅能直接通过云开发对数据库多重嵌套的对象数组字段进行增删改查,还要其中数据的下标能够作为变量动态操作,显然官方的示例并不能完全满足我们的需求,那么有没有办法可以实现这个问题呢?

在网上找了好久,又详细看了几遍文档,对官方示例进行了一些修改,在开发工具中也尝试了好几遍进行编译,终于找到了能够解决这个问题的办法。

其具体的方法如下:

var index = 1;
var num = 2
db.collection('todos').doc('test').update({
  data: {
    [`root.objects.${index}.numbers.${num}`]: 80
  },
})

经过测试发现能够完全符合我们的需求,再例如对如下示例进行插入操作:

{
  "root": {
     {
        "numbers": [10, 20, 30],
        "objects": [
             {
                "name":"张三"
             }
        ]
     },
     {
        "numbers": [50, 60, 70],
        "objects": [
            {
                "name":"李四"
            }
       ]
     }
  }
}

其对应的操作方法为:

const _ = db.command;
var index = 1;
db.collection('todos').doc('test').update({
  data: {
    [`root.${index}.objects`]: _.push({
                    each: [
                            {"name":"王五"}
                       ],
                    })
  },
})

详细见微信开发文档云开发更新数组操作符

这样就实现了我们想要直接通过云开发对多重嵌套的对象数组字段进行增删改查的操作啦,确实要方便很多。

注:如果觉得有用的话,记得点赞收藏哦~


版权声明:本文为m0_54635929原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。