当前位置:网站首页>微信小程序使用云函数更新和添加云数据库嵌套数组元素
微信小程序使用云函数更新和添加云数据库嵌套数组元素
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)
});
}
微信小程序的官方文档写得太混乱了,东一锤子西一锤子,人为增大简单事情的难度,因此写这篇博客记录下来。以供参考。
边栏推荐
- Why don't you programmers make a living off your own projects?And have to work for someone else?
- [Dynamic programming] Maximum sum of consecutive subarrays
- $attrs/$listeners
- 问题7:列表的拼接
- Just debuted "Fight to Fame", safety and comfort are not lost
- Redis 使用 sorted set 做最新评论缓存
- Detailed explanation of TCP and UDP
- 安全20220722
- BUG definition of SonarQube
- Mysql 45 study notes (twenty-five) MYSQL guarantees high availability
猜你喜欢

How to develop a high-quality test case?
![[C language] Preprocessing operation](/img/69/0aef065ae4061edaf0d96b89846bf2.png)
[C language] Preprocessing operation

postgresql 15源码浅析(5)—— pg_control

【论文阅读】Mastering the game of Go with deep neural networks and tree search

Unity2D 自定义Scriptable Tiles的理解与使用(四)——开始着手构建一个基于Tile类的自定义tile(下)

type_traits元编程库学习

What skills do I need to learn to move from manual testing to automated testing?

Component pass value provide/inject

Mysql 45 study notes (twenty-four) MYSQL master-slave consistency

idea工程明明有依赖但是文件就是显示没有,Cannot resolve symbol ‘XXX‘
随机推荐
Daily practice of LeetCode - palindrome structure of OR36 linked list
No qualifying bean of type 问题
MATLAB/Simulink & & STM32CubeMX tool chain completes model-based design development (MBD) (three)
Can‘t load /home/Iot/.rnd into RNG
MySQL修改root账号密码
Daily practice of LeetCode - 138. Copy a linked list with random pointers
A brief introduction to the showDatePicker method of the basic components of Flutter
PMP WeChat group daily exercises
Implementation of a sequence table
Postgresql 15 source code analysis (5) - pg_control
微软 AI 量化投资平台 Qlib 体验
(五)final、抽象类、接口、内部类
volatile内存语义以及实现 -volatile写和读对普通变量的影响
VS QT - ui does not display newly added members (controls) || code is silent
Redis 使用LIST做最新评论缓存
exsl文件预览,word文件预览网页方法
MySQL 8.0.30 GA
Redis 统计用户新增和留存
安全20220712
安全20220715