收藏
回答

云开发嵌套结构只能读取第一个,正确的写法是什么?

急求!!能解决的小伙伴有偿给红包。需求如果不明确可以加我qq 504556221,官网和社区的几个链接都看了,但好像都不行

目的是更新所有的HasReach的值

数据库结构如下:

SceneDataList是一个数组,里面存放的是对象,对象里有一个UnlockConditionList也是数组,这个数组里存的也是对象,要取出其中的HasReach的值

云函数代码段如下

let reachPatern = "SceneDataList.$.UnlockConditionList.0.HasReach";
// 找到场景数据表中指定Id,如果不存在则新增,如果存在则更新状态
let updateResult = await sceneTable.where({
    _id:docId,
    "SceneDataList.UnlockConditionList":{
        "Params": condition.params,
        "Type": condition.type,
    }
}).update({
    data:{
        [reachPatern]:true,
    }
})
if (updateResult != null && updateResult.stats != null) {
    if (updateResult.stats.updated === 1){
        // 判断当前id的所有解锁条件是否都达成
         
        // 更新成功
        return {
            success: true,
            updated: true,
        }
    }
    else{
        // 没有更新成功,更新数为 0
        return {
            success: false,
            errInfo: "databaseErr",
        }
    }
}


最后一次编辑于  09-07
回答关注问题邀请回答
收藏

2 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    09-07

    // 云函数入口函数

    exports.main = async (event, context) => {

        // some code

        return new Promise((resolve, reject) => {

            var p = '1', t = 'unlock', id = '7bcd38d1-63d2-4598-9c7b-e6e32add1759'

            sceneTable.where({

                _id: id,

                "S.U": {

                    "P": p,

                    "T": t,

                }

            }).get().then(res=>{

                var data = res.data[0], ret = {S:[]}

                for (var i in data.S){

                    var one = data.S[i], _one = {U:[]}

                    for (var k in one.U) {

                        var sub = one.U[k]

                        // 符合条件的才更新HasReach

                        if (sub.P == p && sub.T == t){

                            sub.H = true

                        }

                        _one.U.push(sub)

                    }

                    ret.S.push(_one)

                }

                sceneTable.doc(id).update({

                    data: ret

                }).then(res=>{

                    resolve({success: true, updated: true})

                }).catch(res=>{

                    reject({success: false, errInfo: databaseErr, errDetail: res})

                })

            }).catch(res=>{

                reject({success: false, errInfo: databaseErr, errDetail: res})

            })

        })

    }

    09-07
    赞同
    回复
  • 陈宇明
    陈宇明
    09-07
    1. 通过云开发API获取整个数据

    2. 拿到数据后修改数据内容

    3. 通过修改函数直接覆盖内容

    09-07
    赞同
    回复 2
    • 乔治
      乔治
      09-07
      问题是我的where里的判定条件找到的数据不全,只能找到第一个,找不到所有
      09-07
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      09-07回复乔治
      你是更新1条记录里的所有HasReach,还是更新所有记录里的所有HasReach?
      09-07
      回复
问题标签