当前位置:网站首页>微信小程序使用云函数更新和添加云数据库嵌套数组元素
微信小程序使用云函数更新和添加云数据库嵌套数组元素
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)
});
}
微信小程序的官方文档写得太混乱了,东一锤子西一锤子,人为增大简单事情的难度,因此写这篇博客记录下来。以供参考。
边栏推荐
- Learning DAVID Database (1)
- 【AUTOSAR-RTE】-4-Port and Interface and Data Type
- Unity2D 自定义Scriptable Tiles的理解与使用(四)——开始着手构建一个基于Tile类的自定义tile(下)
- Select the smoke test case, and make the first pass for the product package entering QA
- RESTful api接口设计规范
- Safety 20220722
- Redis 使用LIST做最新评论缓存
- 浅识Flutter 基本组件之CheckBox组件
- 三子棋的代码实现
- Know the showTimePicker method of the basic components of Flutter
猜你喜欢

(4) Recursion, variable parameters, access modifiers, understanding main method, code block

binom二项分布,

安全20220712

MySQL基础操作

type_traits metaprogramming library learning

Key Technologies of Interface Testing

mysql基础知识(二)

Regarding the primary key id in the mysql8.0 database, when the id is inserted using replace to be 0, the actual id is automatically incremented after insertion, resulting in the solution to the repea

A brief introduction to the CheckBox component of the basic components of Flutter

The application and practice of mid-to-platform brand advertising platform
随机推荐
postgresql 15源码浅析(5)—— pg_control
Why don't you programmers make a living off your own projects?And have to work for someone else?
Mysql 45 study notes (23) How does MYSQL ensure that data is not lost
已解决:不小心卸载pip后(手动安装pip的两种方式)
【C语言进阶】文件操作(一)
RESTful api接口设计规范
[C language] General method of base conversion
Can‘t load /home/Iot/.rnd into RNG
MATLAB/Simulink & & STM32CubeMX tool chain completes model-based design development (MBD) (three)
日志级别 和 打印log注意
(六)枚举、注解
Safety 20220715
(树) 最近公共祖先(LCA)
[C language] Three-pointed chess (classic solution + list diagram)
C language from entry to such as soil, the data store
浅识Flutter 基本组件之showDatePicker方法
进程间通信
IDEA common shortcut keys and plug-ins
Good place to download jar packages
Zotero如何删除自动生成的标签