收藏
回答

云开发数据库addToSet添加多个元素官方文档描述有误

官方示例

const _ = db.command
  db.collection('todos').doc('doc-id').update({
    data: {
      tags: _.addToSet({
        each: ['database', 'cloud']
      })
    }
  })

each应为&each,否则addToSet的参数会作为一个对象添加进去

正确写法应为

const _ = db.command
  db.collection('todos').doc('doc-id').update({
    data: {
      tags: _.addToSet({
        $each: ['database', 'cloud']
      })
    }
  })

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.addToSet.html

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

2 个回答

  • 产品-nana
    产品-nana
    2021-05-21

    你好,感谢反馈,文档内容已更新,稍后可查看。

    2021-05-21
    有用
    回复
  • 理想
    理想
    2022-01-03

    我这里使用这个,会重复添加,有时能检查到重复,有时不能:

    数据:

    // 更新数据
        const favoriteList2 =[{
            vehicleFile_id: favoriteItem.id,
            licensePlateNumber: favoriteItem.licensePlateNumber,
            phoneNumber: favoriteItem.phoneNumber,
            startingStation: favoriteItem.startingStation,
            terminus: favoriteItem.terminus,
        }]
        
        collectionDataUserInfos.updateData = {
            data: {
                // 数组更新操作符。原子操作。给定一个或多个元素,除非数组中已存在该元素,否则添加进数组。
                favoriteList: _.addToSet({
                    $each: favoriteList2,
                })
            }
        }
    


    数据库操作语句:

    const updateResult = await db.collection(collectionData.collection)
        .doc(collectionData.updateWhere._id)
        .update(collectionData.updateData)
    


    结果:

    数据一模一样,有时退拒绝提交,有时可以,基本可以提交,并且我写了时间间隔3秒才能点第二下,还是会成功,不知道什么原因

    2022-01-03
    有用
    回复 4
    • Larry
      Larry
      2022-01-04
      不清楚数据库是怎样判断对象是否相等的,尽量还是不要用对象数组
      2022-01-04
      回复
    • 理想
      理想
      2022-01-08
      2022-01-08
      回复
    • 理想
      理想
      2022-01-08回复理想
      这种方式$ne这里如果只有要给条件可以,多个,写为
      2022-01-08
      回复
    • Larry
      Larry
      2022-01-09回复理想
      云开发数据库的$ne应该是_.neq,如果addToSet不靠谱可以试下把数据读出来再自行判断是不是重复
      2022-01-09
      回复
登录 后发表内容