急求!!能解决的小伙伴有偿给红包。需求如果不明确可以加我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" , } } } |
// 云函数入口函数
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})
})
})
}
通过云开发API获取整个数据
拿到数据后修改数据内容
通过修改函数直接覆盖内容