问题1:数据库中的severTime 读出来的写法是什么?
问题2:weiZhi: _.geoNear 读地理位置数据的索引,查询指定范围内的点, 这个功能的写法似乎有问题,加上之后读数据库出问题。(不加,可以正常读数据库)
问题3:建立地理位置索引,有些表可以,有些表不行。但更奇怪的是,可以加索引的表,写不进去数据(已经设置权限为“所有人可读写”)
列表页程序功能说明:
本页代码的功能,主要是把lieBiaoShuZu里的数据能过WX.for写在列表页里。程序界面如下图。 wxml和 js页面的内容都粘贴在下边。
const DB = wx.cloud.database().collection('bmp_Biao')
let totalNum = -1
const app = getApp()
Page({
/**
* 页面的初始数据
*/
data: {
lieBiaoShuZu: [],
lieBiaoseverTime: [],
list: [],
// totalNum = -1,
open_juli: 1000,
hidden_ziDingYi: true,
inp_juli: null,
XY_juli: null,
},
//距离变更设置
but100() {
this.setData({
open_juli: 100,
lieBiaoShuZu: []
})
console.log("清空后,列表数组=", this.data.lieBiaoShuZu)
this.onLoad()
},
but1000() {
this.setData({
open_juli: 1000,
lieBiaoShuZu: []
})
console.log("清空后,列表数组=", this.data.lieBiaoShuZu)
this.onLoad()
},
but3000() {
this.setData({
open_juli: 3000,
lieBiaoShuZu: []
})
console.log("清空后,列表数组=", this.data.lieBiaoShuZu)
this.onLoad()
},
but_x() { //自定义 距离按钮补点击
this.setData({
hidden_ziDingYi: !this.data.hidden_ziDingYi
})
console.log("hidden_ziDingYi:", this.data.hidden_ziDingYi)
},
//自定义输入距离
inp_juli: function (e) {
this.data.inp_juli = e.detail.value;
// console.log("inp_juli输入=", this.data.inp_juli)
},
but_x_ok() { //自定义内容确认按钮
console.log("inp_juli输出=", this.data.inp_juli)
this.setData({
open_juli: this.data.inp_juli,
lieBiaoShuZu: []
})
console.log("清空后,列表数组=", this.data.lieBiaoShuZu)
console.log("open_juli输入:", this.data.open_juli)
this.onLoad()
},
//本地获取云数据库数据
getDataList() {
let len = this.data.lieBiaoShuZu.length
if (totalNum == len) {
wx.showToast({
title: '没有了...',
})
return
}
wx.showLoading({
title: '加载中',
})
console.log("lieBiaoShuZu的长度", len)
//本地获取数据库方式(加入求X范围内的点)
const _ = wx.cloud.database().command //设定,详细看文档
var that = this
DB.where({
//这里注释掉的是读数据库地理位置,并查询出指定范围内的点
// weiZhi: _.geoNear({
// geometry: wx.cloud.database().Geo.Point(app.globalData.app_Location_longitude, app.globalData.app_Location_latitude),
// minDistance: 0,
// maxDistance: that.data.open_juli
// }, console.log("导入范围查找成功:",that.data.open_juli))
})
.skip(len)
// 按 paiXu 降序
.orderBy('severTime', 'desc')
// .limit(19)
.get()
.then(res => {
console.log('re获取成功', res)
this.setData({
lieBiaoShuZu: this.data.lieBiaoShuZu.concat(res.data),
lieBiaoseverTime: res.data //想在这里读取数据库中severTime 的值,结果是[objict objict]
})
console.log("获取成功2=", res)
console.log("重新添加后,列表数组=", this.data.lieBiaoShuZu)
wx.hideLoading()
})
.catch(err => {
console.log('获取失败')
// wx.hideLoading()
wx.showToast({
title: '加载失败',
})
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
//列表内容加载
DB.count()
.then(res => {
console.log("数据总条数", res)
totalNum = res.total
})
this.getDataList()
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
console.log('加载更多。。。。')
this.getDataList()
},
})
数据表建索引,错误信息提示如下:
查看详情
Update Table Error:, Error: FailedOperation, (Location16755) Can't extract geo keys: { _id: "28ee4。。。。。。7acae", severTime: new Date(161。。。641), _openid: "o6Fag4gXEWlLJg9Q3zvDWCQjuIfc", qiuzhi: "求职", qiuzhi_Age: null, qiuzhi_Name: null, qiuzhi_Phone: null, qiuzhi_yiXiang: null, qiuzhi_zhuanChang: null, weiZhi: [ 41.80283, 123.3768 ], qiuzhi_jianLi: null, qiuzhi_xinBie: null } can't project geometry into spherical CRS: [ 4168。。。。 ] (703。。。。。。。。)
DB.where({ })
.then(res => {
var datas = res.data; //res.data就是从后台接收到的值
for (var i = 0; i < datas.length; i++) { //用for循环把所有的时间戳都转换程时间格式,这里调用的是小程序官方demo中带的方法,
datas[i]["severTime"] = time.formatTime(new Date(datas[i]["severTime"]))
//上面这个是时间戳的写法,而severData()存在数据库里的不是时间戳,没找到例子,没弄明白具体写法。
this.setData({
lieBiaoShuZu: datas,
})
}
}
在网上找到以上代码,用来读取列表中的时间戳,先放在变量数组中,转换形式后,再存进列表的数组里。
但这个代码里是转换时间戳的,不是转换severdata(),初学者,还没有弄明白这个的写法。
在数据库操作加地理位置索引时,出现两个问题
1、新建的数据表可以加上地理索引,但写不进去数值。
2、已经有数据的表,加不上地理索引。
最后问题出在一行代码上
data: {
weiZhi: app.globalData.app_Location,
},
把上边的代码改成
weiZhi: [app.globalData.app_Location_longitude, app.globalData.app_Location_latitude],
就可以在,bmp_lieBiao 表里存内容了。
应该是那个1024字节限制的问题或者数据格式的问题!
两种写法,存储的内容是一样的。
先回答3:
GEO是有特定格式的,不是写个数组就完事,请按照这个写法