当前位置:网站首页>微信小程序使用云函数更新和添加云数据库嵌套数组元素
微信小程序使用云函数更新和添加云数据库嵌套数组元素
2022-07-31 04:07:00 【CicadaMay】
需求
1. 更新 Update
现云数据库中有一段Json嵌套数组对象,要求更新其中 list 中的 checked
字段值。数据如下:
{
"book_id": "7-4",
"book_words": [{
"list": [{
"checked": false,
"eg": "Mrs. Rachel Lynde lived on the main road in Avonlea.",
"meaning": "主要道路,⼤路",
"word": "main road"
}, {
"checked": false,
"eg": "At half -past three, Matthew Cuthbert was driving his buggy down the road.",
"meaning": "30分",
"word": "half"
}],
"title": "Anne of Green Gables 1_Mrs. Lynde Is Surprised",
"unit_id": 1
},
{
"list": [{
"checked": false,
"eg": "She saw the odd girl in the ugly dress.",
"meaning": "奇怪的,奇特的",
"word": "odd"
}, {
"checked": false,
"eg": "She saw the odd girl in the ugly dress, with long red braid s and big eyes.",
"meaning": "发辫,辫⼦",
"word": "braid"
}],
"title": "Anne of Green Gables 1_Mrs. Lynde Is Surprised",
"unit_id": 2
}
]
}
.
更新有 set
和 update
两种命令,set
一般和 doc
配合查询主键并更新,不能和where
配合,update
可以和 doc
/ where
配合。
由于在上述json对象里,无法通过doc
获得里面的具体某条字段,所以我们用 where
和 update
来查询更新。
for (let i = 0; i < newwords.length; i++) {
// for循环内更新单条数据
await db.collection('book_words')
.where({
book_id: event.book_id,
"book_words.unit_id": event.unit_id,
"book_words.list.word": event.newwords[i].word
})
.update({
data: {
['book_words.'+(event.unit_id-1)+'.list.'+(event.newwords[i].index)+'.checked']: true
}
})
.then((res) => {
console.log("update book_words result", res)
})
.catch(err => {
console.error(err)
})
}
解释:
a. where
"book_words.unit_id"
:匹配数组中元素,文档:查询、更新数组/嵌套对象
也可以用 elemMatch
来查询元素:
文档:Command.elemMatch
const db = cloud.database();
const _ = db.command; // command命令
//......function
.where({
book_id: event.book_id,
book_words:_.elemMatch({
unit_id: event.unit_id,
list:_.elemMatch({
word: event.newwords[i].word
})
})
})
b. update
[文档:查询、更新数组/嵌套对象]
(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/query-array-object.html)
. ['book_words.'+(event.unit_id-1)+'.list.'+(event.newwords[i].index)+'.checked']
:
相当于:book_words.0.list.0.checked -> book_words[0].list[0].checked.
+number
= 查找数组第number项元素,
更新checked值。
.
2. 添加,如有则更新,没有则添加
将数组添加到数据库里,有则更新,无则添加,需要用到 set
命令,update
: 更新一条记录;set
: 更新替换一条记录。
文档:更新记录
文档:增删查改SDK-更新
// doc 会自动将 word 设为主键ID ,插入时则会根据 主键word 判断是更新还是新增;
// 同样在for循环中批量单条添加
for (let i = 0; i < newwords.length; i++) {
await db.collection('new_words').doc(event.newwords[i].word).set({
data: event.newwords[i]
}).then((res) => {
console.log("new_words update result", res)
})
.catch(err => {
console.error("new_words", err)
});
}
微信小程序的官方文档写得太混乱了,东一锤子西一锤子,人为增大简单事情的难度,因此写这篇博客记录下来。以供参考。
边栏推荐
猜你喜欢
「 每日一练,快乐水题 」1331. 数组序号转换
idea工程明明有依赖但是文件就是显示没有,Cannot resolve symbol ‘XXX‘
pom文件成橘红色未加载的解决方案
C语言从入门到如土——数据的存储
浅识Flutter 基本组件之showDatePicker方法
Mysql 45 study notes (23) How does MYSQL ensure that data is not lost
已解决:不小心卸载pip后(手动安装pip的两种方式)
《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记
MATLAB/Simulink&&STM32CubeMX工具链完成基于模型的设计开发(MBD)(三)
Safety 20220712
随机推荐
BUG消灭者!!实用调试技巧超全整理
Day32 LeetCode
【论文阅读】Mastering the game of Go with deep neural networks and tree search
安全20220712
Select the smoke test case, and make the first pass for the product package entering QA
endian mode
A brief introduction to the CheckboxListTile component of the basic components of Flutter
[shell basics] determine whether the directory is empty
[Dynamic programming] Maximum sum of consecutive subarrays
Implementation of a sequence table
RESTful api接口设计规范
[CV project debugging] CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT problem
【AUTOSAR-RTE】-4-Port and Interface and Data Type
How to develop a high-quality test case?
安全20220718
问题1:给你1-10的列表,实现列表输出,单数在左边,双数在右边。
三子棋的代码实现
识Flutter 基本组件之showTimePicker 方法
How Zotero removes auto-generated tags
ClickHouse:设置远程连接