微信小程序云开发笔记

连接到云数据库

const db = wx.cloud.database()

查询数据

  //拿数据库的表 doc是指定id来查询 get查询 add添加

db.collection('demolist').doc("cbddf0af6097ed7d076b18b9342679b6").get().then(res => {
console.log(res);
//把数据库中的数据存到data中
this.setData({
dataObj: res.data
 })
})
//指定一些参数来查询  用where来查询
db.collection('demolist').where({author:'秦兢泽'}).get().then(res => {
      console.log(res);
    })

插入数据

//js代码
//可以为加载数据的时候添加加载中函数
    wx.showLoading({
      title: '数据加载中...',
      //mask为true时在没有完成操作之前无法再次进行点击操作
      mask:true
    })

db.collection('demolist').add({
      //必须写data
      data:{
        title:'外交部辟谣美方所谓解放军SARS内部文件',
        content:"华春莹还表示,很多国家对美国在其国内外建立的生物实验室存在着严重关切。。"
      } 
    }).then(res => {
      console.log(res);
      console.log('添加成功');
      //需要把加载中关闭,不然一直转圈
      wx.hideLoading()
    })
  },

  //提交表单添加进数据库
btnSub(res) {
    console.log(res)
    // var title = res.detail.value.title
    // var author = res.detail.value.author
    // var content = res.detail.value.content
    //上面的是最古老的写法,可以用ES6的写法,解构赋值
   // var {title,author,content} = res.detail.value
   //本身返回的是一个对象,我们可以直接保存对象,在数据库中直接写对象进去也可以添加,最简洁的一种
   var resVlu = res.detail.value 
   db.collection('demolist').add({
     data:resVlu
      // data: {
      //   title:title,
      //   author:author,
      //   content:content
      // }
    }).then(res => {
      console.log(res);
    })
  },

//xml代码
<button type="primary" bindtap="getData">点击获取数据</button>
<view>-----------------</view>
<button type="primary" bindtap="addData">插入一条数据</button>
-----------------
<!-- 利用表单添加数据 -->
<form bindsubmit="btnSub">
  <input name="title" placeholder="请输入标题"></input>
  <input name="author" placeholder="请输入作者"></input>
  <textarea name='content' placeholder="请输入内容"></textarea>
  <button type="primary" form-type="submit">提交</button>
  -------------
<!-- 要重置输入的内容只需要加上一个type叫reset就可以重置输入的内容 -->
  <button type="primary" form-type="reset">重置</button>
</form>

在wxml中 利用表单添加数据

<!-- 利用表单添加数据 -->
<form bindsubmit="btnSub">
  <input name="title" placeholder="请输入标题"></input>
  <input name="author" placeholder="请输入作者"></input>
  <textarea name='content' placeholder="请输入内容"></textarea>
  <button type="primary" form-type="submit">提交</button>
  -------------
  <button type="primary" form-type="reset">重置</button>
</form>

更新数据

//更新数据,必须要指定修改什么,可以写doc,或者where来找要改谁,update是局部修改,set是全部更新,直接覆盖
  updateData() {
    db.collection('demolist').doc('b00064a7609938871656c74406b07168').update({
      data:{
        author:'哥'
      }
    }).then(res => {
      console.log(res);
    })
  },

删除数据

delData() {
    db.collection('demolist').doc('b00064a7609a8e20169ec8115e59c20e').remove().then(res => {
      console.log(res);
    })
  },

在wxml中可以通过bindinput来获取输入框的内容

 <input placeholder="请输入id" bindinput="myIpt"></input>

js代码
  //可以记录输入框中的内容,比如保存输入的id,然后进行删除操作等等
 myIpt(res) {
 var vlu =res.detail.value
 },

count

//获取记录格式 用count,可以直接获取数据表中一共有多少条数据
  btnNum() {
    db.collection('demolist').count().then(res => {
      console.log(res);
    })
  },

watch

onLoad: function (options) {
    //watch监听事件,可以监听修改后的数据并回调函数,必须要写onChange,onError
    //可以及时更新数据,比如别人点赞啊收藏啊这些用watch去监听就可以及时反馈到页面上

    db.collection('demolist').watch({
      onChange:res => {
        this.setData({
          dataArry:res.docs
        })
        console.log(res);
      },
      onError:err => {
        console.log(err);
      }
    })
  },

command函数的使用

const db =wx.cloud.database()
//command函数,里面有更细致的查询修改删除等操作的方法
const c=db.command
Page({
  data: {
    dataArry:[]
  },
  //1.通过limit可以限制查询多少个
  //2.orderBy排序,asc是默认顺序排列,desc就是倒序排列
  //3.skip跳过,写几个就可以跳过前面的多少个,可以用来翻页,相当于跳过这一页
  //4.field可以过滤数据,想要显示什么数据都可以写true,不想要的就不用写
  getData() {
    db.collection('demolist').limit(3).skip(3).field({
      title:true,
      time:true
    }).orderBy('time','asc').get().then(res => {
      console.log(res);
      this.setData({
        dataArry: res.data
      })
    })
  },

/*
command函数 查询比较运算符
eq等于,neq不等于
lt小于,lte小于等于/gt大于,gte大于等于
这些一般就用在分数段啊年龄数啊这些,主要是对numberl类型操作
in 要求在这个数组内的值 in([60,700]),展示60或者700的
nin 不包含这些的 黑白名单

 查询逻辑操作符
and and(c.gt(0),c.lt(1200))表示大于0小于1200
or or(c.eq(39),c.eq(234)) 表示包含39或者234的数据,跟上面的in一样
*/

  showData() {
    db.collection('demolist')
    .where({
      hits:c.eq(773)
    })
    .orderBy('hits','desc').get()
    .then(res => {
      console.log(res);
      this.setData({
        dataArry: res.data
      })

   // and 的多个数据段查询
    db.collection('demolist')
    .where(
      c.and([
        {
          author:c.eq('哥')
        },
        {
          hits:c.lt(900)
        },
      ])
    )
    .get()
    .then(res => {
      console.log(res);
          this.setData({
        dataArry: res.data
      })
    })


   //查询字段操作符
    //exists判断字段是否存在
    //查询数组的操作符
    //size 数组字段有几个,意思是这个数组的有几个值,数组的长度
    //all 数组字段包含这个指定元素
    db.collection('demolist')
    .where({
      time:c.exists(true)
      tabs:c.size(2)
      tabs:c.all(['母爱'])
    })
    .get()
    .then(res => {
      console.log(res);
          this.setData({
        dataArry: res.data
      })
    })

 //command函数 更新操作
  //可以用来更新比如点赞操作啊这些
  //inc自增 可以写自增多少,数据类型要数字,inc(-5) 表示每次点击减5
  //remove 删除一个字段

  //push 往数组里添加字段
  updateData() {
    db.collection('demolist').doc('28ee4e3e609a8e1f17da05a70033d9d1')
    .update({
      data:{
        title:'哈哈',
        hits: c.inc(1) ,
        title:c.remove(),
        list: c.push(['df','dfia'])
      }
    })
    .then(res => {
      //在调用一次展示的数据就会实时变化了
      this.showData()
      console.log(res);
    })


}

wxml代码:
<button type="primary" bindtap="getData">条件查询</button>
-----------
<button type="primary" bindtap="showData">展示数据</button>
<view wx:for="{{dataArry}}" wx:key='index'>{{index +1}}.{{item.title}} 点击数:{{item.hits}}</view>

云函数的使用

  • 这个云函数是获取数据的,通过skip来实现分页功能,通过limit来限制每次可以获取多少条数据
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
//调用云函数数据库,必须写
const db=cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  var num = event.num
  var page=event.page
//必须要有返回值

  return await db.collection('demolist').skip(page).limit(num).get()
}
//js的代码
Page({
  data: {
    dataArry:[],
  },
  getData(num=5,page=0) {
    wx.cloud.callFunction({
      name:"getData",
      //传递数据到云函数
      data:{
        num,
        page
      }
    })
    .then(res => {
      var oldData = this.data.dataArry
      //新数组拼接老数组
      var newData = oldData.concat(res.result.data)
      this.setData({
        dataArry:newData
      })
      console.log(res.result.data);
    })
  },

 /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
//页面渲染出来马上获取数据
    this.getData()
  },

/**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
//每次下拉就多获取五条数据
    var page=this.data.dataArry.length
    this.getData(5,page)
  },


})
  • 这个云函数是用来获取增加点赞数的
// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
const db=cloud.database()
const c=db.command

// 云函数入口函数
exports.main = async (event, context) => {
  var id=event.id
//通过更新数据来实现点赞的增加
 return db.collection('demolist').doc(id).update({
    data:{
      hits:c.inc(7)
    }
  })
}
//js代码
Page({
 //点击将阅读数+7
  clickRow(res) {
    wx.showLoading({
      title: '数据加载中...',
    })
    //1.获取点击的id和索引值
    var {id,idx} = res.currentTarget.dataset;
    //2.云函数进行更新操作

    //3.前端连后端,将数据传输给后端,后端返回数据
    wx.cloud.callFunction({
      name:"updateHits",
      //传递数据到云函数
      data:{
        id:id
      }
    })
    .then(res => {
      console.log(res);
      //4.重新渲染列表数据 
      var newData = this.data.dataArry
      newData[idx].hits+=7
      this.setData({
        dataArry:newData
      })
      wx.hideLoading()
    }) 
  },
})
//xml代码
<!-- 点击后并不知道拿到的是啥,需要指定想要什么,比如拿id是肯定要的 -->
<view class="news" bindtap="clickRow" data-id="{{item._id}}" data-idx="{{index}}" wx:for="{{dataArry}}" wx:key='index'>
  <view class="title">{{index +1}}.标题:{{item.title}}</view>
  <view class="author">作者:{{item.author}} </view>
  <view class="hits">阅读量:{{item.hits}}</view>
  <view class="time">发布日期:{{item.time}}</view>
</view>
  • 上传图片功能的实现
//js代码
var urlArr = []
var filePath=[]
Page({
  data: {
  
  },
  clickBtn() {
    wx.chooseImage({
      success: res => {
        filePath = res.tempFilePaths
        
        //同时上传多张图片
        filePath.forEach((item,idx) =>{
           this.cloudFile(idx,item)
        })
       
      }
    })

  },
  cloudFile(filename,path) {
    wx.showLoading({
      title: '上传中',
    })
    wx.cloud.uploadFile({
      cloudPath: 'userImage/'+filename+Date.now()+'.jpg',
      filePath: path
    }).then(res => {
      console.log(res);
      urlArr.push(res.fileID)
      if(filePath.length==urlArr.length) {
          this.setData({
        urlArr
      })
      }
    
      
      wx.hideLoading()
    })
  },
})
//xml代码
<button type="primary" bindtap="clickBtn">上传文件</button>
<image wx:for="{{urlArr}}" src="{{item}}"></image>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容