4.2 云开发JSON数据库
MySQL、Oracle之类的“关系型数据库”。JSON数据库是“非关系型数据库”,没有行表列的概念。
4.2.1 JSON数据库基本概念
集合:一个数据库有多个集合,一个集合存储通常是同一类数据,可看作为JSON数组,数组中每个元素是一条记录。对应表
记录:对应行
字段:对应列
数据库API:通过JS函数实现数据的增删改查
ID:每个记录都有一个_id,用于唯一标识一条记录
创建者:通过小程序端调用API新增记录,记录会自动添加_openid字段,代表小程序用户的ID。
云开发控制台或云函数新增记录,不会有_openid字段。
4.2.2 字段的数据类型
云开发数据库字段的数据类型除了包括string、number、boolean、null、Array、Object以外,还增加了两个特殊的数据类型,时间类型Date和地理位置点类型GeoPoint。
Date类型即JavaScript中的Date类型,以下代码可获取到Date类型:
{
time: new Date()
}
在小程序端获取的是手机设置时间,客户端时间,可能不准,可能手动调过。可以使用数据库API获取服务器端时间。代码如下:
// 这段代码可以出现在小程序页面的JS文件中或app.js文件中
const db = wx.cloud.database() // 在小程序端获取JSON数据库的引用
db.collection('testOne').add({ // 在JSON数据库的testOne集合中增加一个记录
data:{
createTime: db.serverDate() // createTime字段的数据类型为Date,时间为服务器时间
}
})
(源代码没有data:{createTime: db.serverDate()},有的是createTime: db.serverDate()。
我保存源代码后报错errCode: -401003 api parameter type error | errMsg: parameter.data should be object instead of undefined;
根据博客使用微信小程序-云开发时报错: Error: errCode: -401003 api parameter type error | errMsg: parameter.data should ...-CSDN博客
加了参数data,然后在云开发控制台加了testOne集合,保存了修改后的代码,没看到云开发控制台的集合新增记录,点击记录列表旁边的索引管理,数据权限再点击记录列表发现好几条记录,开心。图片如下:
)
使用wx.cloud.database前wx.cloud.init必须已经在app.js里被调用过了。
serverDate()函数可以传入offset属性的Json对象参数,单位参数毫秒,获取一定时间前后的时间
{
serverDate({
offset: 60 * 60*1000 //获取服务器时间一个小时以后的时间
})
}
GeoPoint可以表示地理位置的点、线段、多边形区域以及它们的集合。使用如下代码在数据库中保存GeoPoint类型的数据。
// 这段代码可以出现在小程序页面的JS文件中或app.js文件中
const db = wx.cloud.database() // 在小程序端获取JSON数据库的引用
db.collection('testOne').add({ // 在JSON数据库的testOne集合中增加一个记录
data:{
point: db.Geo.Point(113,23), // 使用API函数创建一个东经113,北纬23的点
line: db.Geo.LineString([ // 使用API函数创建线段,一条线段由两个或更多的点有序连接组成
db.Geo.Point(113,23),
db.Geo.Point(120,50),
db.Geo.Point(114,50)
])
}
})