小程序云開發數據庫

查詢指令之比較和邏輯操作符

  • gt 大于
  • lt 小于
  • eq 等于
  • neq 不等于
  • lte 小于或等于
  • gte 大于或等于
  • in 在數組中
  • nin 不在數組中
  • and 條件與
  • or 條件或
  • not 條件非
  • nor 都不

示例:查詢廣東省內、GDP 在 3000 億以上且在 1 萬億以下的城市。

.where({
    province:_.eq("廣東"),
    gdp:_.gt(3000).and(_.lt(10000))
  })

構建查詢條件的5個方法

  • Collection.where() 查詢的條件指令
  • Collection.field() 顯示哪些字段
  • Collection.orderBy() 排序方式, orderBy('字段名', '排序方式') desc 降序、asc 升序
  • Collection.skip() 跳過多少條記錄(常用于分頁),0不跳過;每頁20個:skip((n-1)*20)
  • Collection.limit() 限制顯示多少條記錄(最大數量:小程序端20,服務端100)

示例:

const db = wx.cloud.database()  //獲取數據庫的引用
const _ = db.command     //獲取數據庫查詢及更新指令
db.collection("china")  //獲取集合china的引用
  .where({              //查詢的條件指令where
    gdp: _.gt(3000)     //查詢篩選條件,gt表示字段需大于指定值。
  })
  .field({             //顯示哪些字段
    _id:false,         //默認顯示_id,這個隱藏
    city: true,
    province: true,
    gdp:true
  })
  .orderBy('gdp', 'desc')  //排序方式,降序排列
  .skip(0)                 //跳過多少個記錄(常用于分頁),0表示這里不跳過
  .limit(10)               //限制顯示多少條記錄,這里為10

  .get()                   //獲取根據查詢條件篩選后的集合數據
  .then(res => {
    console.log(res.data)
  })
  .catch(err => {
    console.error(err)
  })
大家可以留意一下數據查詢的鏈式寫法, wx.cloud.database().collection('數據庫名').where().get().then().catch(),前半部分是數據查詢時對對象的引用和方法的調用;后半部分是Promise對象的方法,Promise對象是get的返回值。寫的時候為了讓結構更加清晰,我們做了換行處理,寫在同一行也是可以的。

正則匹配

options參數:options 支持 i, m, s 這三個 flag。

  • i 大小寫不敏感
  • m 跨行匹配
  • s 讓.可以匹配包括換行符在內的所有字符
    示例:
// 數據庫正則對象
db.collection('todos').where({
  description: db.RegExp({
    regexp: 'miniprogram',
    options: 'i',
  })
})

數據庫常用操作

Collection.add() 新增記錄

db.collection('todos').add({
        data:{
        description:'待辦測試',
         due:'2021-01-20',
         tags:['clound','database'],
         style:{
           color:'red'
         },
         done:false
       },
}).then(res=>{
  console.log(res)
}).catch(console.err)

Collection.get() 查詢記錄

//查詢多條記錄
db.collection('todos').where({
  'style.color':'red'
}).get()
//查詢單條記錄
db.collection('todos').doc('28ee4e3e600699ab001af1fc07ccd456').get().then(res=>{
    console.log('獲取數據:',res.data);
})

Collection.remove() 刪除記錄

僅可刪除創建者創建的數據

 db.collection('todos').doc('79550af26006a5df001966cd11ad4763').remove().then(res=>{
      console.log(res);
    });

Collection.update() 更新記錄

僅可修改創建者創建的數據

    db.collection('todos').doc('1526e12a6006a1e100148dbc1cf7bb7a').update({
      data:{
        'done':false,
        'style.color':'red'
      }
    }).then(res=>{
      console.log(res);
    }); 

Collection.count() 統計記錄

小程序端:僅能統計有讀權限的記錄數;
管理端:可以統計集合的所有記錄數。

  • 注意:與集合權限設置有關
    field、orderBy、skip、limit 對 count 是無效的,只有 where 才會影響 count 的結果,count 只會返回記錄數,不會返回查詢到的數據。
    示例:
const db = wx.cloud.database()
const _ = db.command
db.collection("china")
  .where({
    gdp: _.gt(3000)
  })
  .count().then(res => {
    console.log(res.total)
  })

云函數操作數據庫

  • 注意:cloud.database() wx.cloud.database()云函數端的數據庫引用和小程序端有所不同
    新建一個云函數todosdata,然后輸入以下代碼:
// 云函數入口函數
exports.main = async (event, context) => {
   const db=cloud.database();
   const _=db.command;

  return await db.collection('todos').where({
    'done':false
  }).get();
}

然后右鍵todosdata云函數根目錄選擇在終端打開,輸入npm install,之后“上傳并部署所有文件”。

小程序調用云函數:

 todosBtn(){
    wx.cloud.callFunction({
      name:'todosdata' 
    }).then(res=>{
      console.log('todos云函數:',res.result.data);
    })
  }

在控制臺可以查看到查詢結果。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容