您可以通过EMAS Serverless提供的数据存储服务API对集合(相当于MySQL中的表)进行数据读取、写入、更新、删除等操作。
读取数据
以下代码示例展示了适用于不同场景的数据读取方法:- 从集合中读取所有数据。
例如,查询所有图片:
mpserverless.db.collection('images').find();
- 根据查询条件从集合中读取指定数据。
例如,查询特定用户添加的图片:
mpserverless.db.collection('images').find({ 'userId': userId });
- 读取数据并对获取的数据进行排序。
例如,将获取的图片按照添加时间进行排序:
mpserverless.db.collection('images').find({ 'userId': userId }, {sort: {'uploadTime': -1 }});
- 读取数据并对获取的数据进行操作。
例如,读取用户的图片列表,并显示出来。其中,
_getImages(user)
是封装好的方法,用来获取用户对应的图片列表,并更新小程序中的数据,此时页面内容也会刷新。在onShow()
方法中,当用户信息获取成功,便去获取用户的图片列表并显示到页面上。// client/index/index.js // 显示指定当前用户的图片列表 onShow() { mpserverless.user.getInfo().then((user) => { this._getImages(user); }).catch(console.log); }, // 获取特定用户的图片列表 _getImages(user) { mpserverless.db.collection('images') .find({ userId: user.userId }, {sort: {uploadTime: -1 }}) .then(({ result: images }) => { images.map((item) => { item.uploadTime = new Date(item.uploadTime).toDateString(); return item; }); this.setData({ images }); }) .catch(console.log); },
写入数据
您可以通过以下两种方式写入数据:
- 通过
insertOne()
方法逐条向集合写入数据。例如,使用
insertOne()
方法为用户添加一个文档:mpserverless.db.collection('images').insertOne({ text: inputText, url: imageUrl, });
- 通过
insertMany()
方法批量写入数据。例如,使用
insertMany()
方法为用户添加一个文档:// client/add-image/add-image.js // 将新的任务添加到当前用户的图片列表中 add() { mpserverless.user.getInfo().then((user) => { mpserverless.db.collection('images').insertOne({ text: this.data.inputValue, url: this.data.imageUrl ? this.data.imageUrl : false, userId: user.userId, uploadTime: new Date(), }).then(() => { my.navigateBack(); }).catch(console.log); }).catch(console.log); },
更新数据
您可以通过以下两种方式更新数据:
- 通过
updateOne()
方法更新符合条件的第一条数据。例如,使用
updateOne()
方法更新一个文档:mpserverless.db.collection('images').updateOne( { _id: imageId }, { $set: { text: result.inputValue, } } );
其中,
$set
是更新记录的处理方式。 - 通过
updateMany()
方法更新符合条件的所有数据。以一个图片管理的小程序为例,用户触发重命名图片名称操作时,显示对话框让用户输入新的图片名称,执行更新文档中的名称字段:
// client/index/index.js // 变更图片名称的事件处理 rename(e) { const dataset = e.target.dataset; my.prompt({ title: '修改名称', message: '请输入新的图片名称:', placeholder: '', okButtonText: '确定', cancelButtonText: '取消', success: (result) => { if (result.ok) { mpserverless.db.collection('images').updateOne( { _id: dataset.itemId }, { $set: { text: result.inputValue, } } ).then(() => { this._getImages(this.data.user); }).catch(console.log); } }, }); },
删除数据
您可以通过以下两种方式删除数据:
- 通过
deleteOne()
方法删除第一个符合条件的数据。例如,使用
deleteOne()
方法删除一个文档:mpserverless.db.collection('image').deleteOne({ _id: imageId });
- 通过
deleteMany()
方法删除所有符合条件的数据。以一个图片管理的小程序为例,当用户单击示例小程序图片删除按钮时,唤起删除对话框,确认后执行删除和刷新图片列表:
// client/index/index.js // 删除图片的事件处理 delete(e) { const dataset = e.target.dataset; // 确认和删除图片 my.confirm({ title: '删除图片', content: '是否确认删除该图片?', confirmButtonText: '删除', cancelButtonText: '取消', success: (result) => { if (result.confirm) { mpserverless.db.collection('images').deleteOne({ '_id': dataset.itemId, 'userId': this.data.user.userId, }).then(() => { // 刷新任务列表 this._getImages(this.data.user); }).catch(console.log); } }, }); },