收藏
回答

1、数据库中的severTime 读出来的写法是什么? 2、weiZhi: _.geoNear相

问题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。。。。。。。。)


回答关注问题邀请回答
收藏

2 个回答

  • 张远洲13655956092
    张远洲13655956092
    02-18


    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(),初学者,还没有弄明白这个的写法。

    02-18
    有用
    回复 1
    • 张远洲13655956092
      张远洲13655956092
      02-20
      问题3的解决。
      在数据库操作加地理位置索引时,出现两个问题
      1、新建的数据表可以加上地理索引,但写不进去数值。
      2、已经有数据的表,加不上地理索引。


      最后问题出在一行代码上
      data: {
                  weiZhi: app.globalData.app_Location,
                },
      把上边的代码改成
                  weiZhi: [app.globalData.app_Location_longitude, app.globalData.app_Location_latitude],
      就可以在,bmp_lieBiao 表里存内容了。
      应该是那个1024字节限制的问题或者数据格式的问题!
      两种写法,存储的内容是一样的。
      02-20
      回复
  • Vinlic
    Vinlic
    02-15

    先回答3:

    GEO是有特定格式的,不是写个数组就完事,请按照这个写法

    02-15
    有用
    回复 4
登录 后发表内容
问题标签