云开发嵌套结构只能读取第一个,正确的写法是什么?
发布于 7 年前 作者 junxu 13825 次浏览 来自 官方Issues

急求!!能解决的小伙伴有偿给红包。需求如果不明确可以加我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",
        }
    }
}
2 回复
  1. 通过云开发API获取整个数据

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

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

// 云函数入口函数

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})

        })

    })

}

回到顶部