小程序数据库如何向对象的数组里增加一个新元素

仅供自学用,有错勿扰

问题

今天写小程序的帖子回复系统出了一个问题
总结起来要解决的问题是:
如何在小程序云数据库里,对某个集合的记录进行如下更改,
记录格式大概是下面这样,想进行的操作是,向commentsArray数组里增加一个新的“评论”

{
    "_id": "cbddf0af60d8602a1301639a771296a3",
    "content": "这是个发帖的内容",
    "nickName": "发帖者",
    "time": {
        "$date": "2021-06-27T11:15:49.791Z"
    },
    "_openid": "11111",
    "avatarUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/hAqvgicib3vQ7ic6CygicrvDNfqkia1H3nL1sbKvDOkXk9PA6PLbXuS2Y9Ep3Iy7ic3SsLVZaVyo88zScNE9wCicaKVew/132",
    "commentsArray": [
        {
            "nickName": "评论者1",
            "replysArray": [
                {
                    "_openid": "111",
                    "avatarUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/oBO06ZkSGh2CYbiaia60AxeewGVqo8UCw00DleortA9Rp8uEV9PaicnuRoOVkHoPdtfnONtxY3TkNzeRzF7Uzrotw/132",
                    "floor": 0.0,
                    "nickName": "回复者1",
                    "replyContent": "这个是对此评论的回复",
                    "time": {
                        "$date": "2021-06-27T11:20:24.636Z"
                    }
                },
                {
                    "nickName": "回复楼中者1",
                    "replyContent": "这个是对一楼回复的回复",
                    "time": {
                        "$date": "2021-06-27T11:23:57.021Z"
                    },
                    "_openid": "111",
                    "avatarUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/MFcfqtbpodOuHWibJx9AqCIS2W0ClUreSgwjCRVswTEA7vcc5OCQeQVzf68GjQ7RXGPFQTjnRblf9gxQg41RQdQ/132",
                    "floor": "1"
                }
            ],
            "time": {
                "$date": "2021-06-27T11:17:21.216Z"
            },
            "_openid": "111",
            "avatarUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/icnVaBhGZu80jCQYicLDFY4pxtpE3GnDAC7q1WZ2lHrwC1fHEBTRZiapHcicfYA68YqL6x9Ivhjpf3B3f5kxPGYOSg/132",
            "commentContent": "这个是对帖子的评论111"
        },
        {
            "nickName": "评论者2",
            "replysArray": [
                {
                    "_openid": "111",
                    "avatarUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/sApu5JSU02iaoP1DsYfhmhTns6NNMX6TrBnxM2icYM2PDdecc76TvESC9joaxcuQas84PqHY1Pic82HO2WyRhXXrw/132",
                    "floor": 0.0,
                    "nickName": "回复者1",
                    "replyContent": "这个是对此评论的回复",
                    "time": {
                        "$date": "2021-06-27T11:20:24.636Z"
                    }
                },
                {
                    "nickName": "回复楼中者1",
                    "replyContent": "这个是对一楼回复的回复",
                    "time": {
                        "$date": "2021-06-27T11:23:57.021Z"
                    },
                    "_openid": "111",
                    "avatarUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/sApu5JSU02iaoP1DsYfhmhTns6NNMX6TrBnxM2icYM2PDdecc76TvESC9joaxcuQas84PqHY1Pic82HO2WyRhXXrw/132",
                    "floor": "1"
                }
            ],
            "time": {
                "$date": "2021-06-27T11:17:21.216Z"
            },
            "_openid": "111",
            "avatarUrl": "https://thirdwx.qlogo.cn/mmopen/vi_32/7ccIwL5cl0PIYiclpk4uN3QaYG51wJwpCCrelnD87qbAtLLDqlicpFUfctcwOZknWl1kgERuc37R4Fgeqz5HiaFVg/132",
            "commentContent": "这个是对帖子的评论222"
        }
    ]
}

解决方法

最后的解决方法是下面这样,先对某一个记录进行更新,在更新的过程中push一个新元素,其中有很多坑,我就写在后面了。

const _ = db.command//db是数据库,之前定义过了不再赘述
    db.collection('post').doc('28ee4e3e60d9cafe25fb5d833f21d283').update({
      data: {
        commentsArray: _.push({
          nickName: "评论者1",
          replysArray: [],
          time: new Date(),
          _openid: "111",
          avatarUrl: "https://thirdwx.qlogo.cn/mmopen/vi_32/icnVaBhGZu80jCQYicLDFY4pxtpE3GnDAC7q1WZ2lHrwC1fHEBTRZiapHcicfYA68YqL6x9Ivhjpf3B3f5kxPGYOSg/132",
          commentContent: "这个是对帖子的评论111"
        })
      },
      success: function (res) {
        console.log(res)
      }
    })

坑一

_.push不能直接push一个对象进去,比如不能先自己定义一个

newComment:{
          nickName: "评论者1",
          replysArray: [],
          time: new Date(),
          _openid: "111",
          avatarUrl: "https://thirdwx.qlogo.cn/mmopen/vi_32/icnVaBhGZu80jCQYicLDFY4pxtpE3GnDAC7q1WZ2lHrwC1fHEBTRZiapHcicfYA68YqL6x9Ivhjpf3B3f5kxPGYOSg/132",
          commentContent: "这个是对帖子的评论111"
}

然后

_.push(this.data.newComment)
坑二

本来想用set,但是死活都用不了,就放弃了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值