微信小程序云开发(五)数据库-查

  • Post author:
  • Post category:小程序




查询一条
oras.doc('doc-id').get({
  success: function(res) {
    console.log(res.data)
  }
})

实例:

//callback风格
queryDD(){
	const db = wx.cloud.database()    //拿到数据库的引用
	const oras = db.collection("oras")    //拿到集合的引用
	oras.doc("记录id").get({
		success: function(res){
			console.log(res)
		}
	})
}
//promise风格
queryDD(){
	const db = wx.cloud.database()    
	const oras = db.collection("oras")    
	oras.doc("记录id").get().then(res=>{
		console.log(res)
	})
}


查询多条


查询全部
oras.get({
  success: function(res) {
    console.log(res.data)
  }
})
oras.get().then(res=>{
	console.log(res)
})

注意:

  • 云函数端:默认且最多取 100 条记录。
  • 小程序端:默认且最多取 20 条记录。

    • 解决方案:通过云函数端, 多次查询, 拼接成最终结果返回(涉及分页查询)


条件查询
oras.where({
  _openid: 'user-open-id',
  style: {
    color: 'yellow'
  }
}).get({
  success: function(res) {
    console.log(res.data)
  }
})
oras.where({
  age: 20,
  height: 180
}).get().then(res=>{
	console.log(res)
})

如果查询的字段是个对象

//查询num=1的记录
//方法1:
oras.where({
	obj: {
		num: 1
	}
}).get().then(res=>{
	console.log(res)
})

//方法2:用“点表示法”表示嵌套字段

注意:

  • 多个条件之间是

    &&

    (与)的关系

  • 也可以用 “点表示法” 表示嵌套字段

    collection.where({
      _openid: 'user-open-id',
      'style.color': 'yellow'
    })
    .get({
      success: function(res) {
        console.log(res.data)
      }
    })
    

指令

  • 查询指令

    • eq 等于
    • neq 不等于
    • lt 小于
    • lte 小于或等于
    • gt 大于
    • gte 大于或等于
    • in 字段值在给定数组中
    • nin 字段值不在给定数组中
  • 逻辑指令

    • and
    • or
    • not

查询指令实例:

const _ = db.command
oras.where({
	age: _.gte(18)
}).get().then(res=>{
	console.log(res)
})
const _ = db.command
oras.where({
	age: _.in([1, 3, 2])
}).get().then(res=>{
	console.log(res)
})

逻辑指令实例:

const _ = db.command
oras.where({
	age: _.gte(20).or(_lte(16))    //大于等于20或者小于等于16
}).get().then(res=>{
	console.log(res)
})


分页查询
Collection.skip(offset: number): Collection        //从指定序列后的结果开始返回(跳)
Collection.limit(value: number): Collection        //指定查询结果集数量上限(取)

实例:

//分页,每页2条,这里拿取第二页的的数据
queryWhere(){
	const db = wx.cloud.database()    
	const oras = db.collection("oras")   
	
	let page = 2
	let pageSize = 2
	oras.skip((page - 1) * pageSize).limit(pageSize.get().then(res=>{
		console.log(res)
	}))
}


字段筛选
Collection.field(projection: Object): Collection     //指定返回结果中记录需返回的字段

实例:

query(){
	const db = wx.cloud.database()   
	const oras = db.collection("oras")  
	oras.field({     //只取age和height两个字段
		age: true,
		height: true
	}).get().then(res=>{
		console.log(res)
	})
}

结果:

image-20210409165617761

也可以不拿id:

query3(){
	const db = wx.cloud.database()   
	const oras = db.collection("oras")  
	oras.field({     //只取age和height两个字段
		_id: false,
		age: true,
		height: true
	}).get().then(res=>{
		console.log(res)
	})
}

结果:

image-20210409165744605



排序
Collection.orderBy(fieldPath: string, string: order): Collection

//asc 升序
//desc 降序

实例:

query3(){
	const db = wx.cloud.database()   
	const oras = db.collection("oras")  
	oras.field({     //只取age和height两个字段
		_id: false,
		age: true,
		height: true
	}).orderBy("age", "asc").get().then(res=>{     //按age升序排序(asc)
		console.log(res)
	})
}

结果:

image-20210409165953147

以对象的某一个字段排序

实例:以obj字段的num排序 (obj是一个对象)

//降序排序
query3(){
	const db = wx.cloud.database()   
	const oras = db.collection("oras")  
	oras.field({      //取age、height、obj字段
		_id: false,
		age: true,
		height: true,
		obj: true
	}).orderBy("obj.num", "desc").get().then(res=>{     
		console.log(res)
	})
}

//升序排序
query3(){
	const db = wx.cloud.database()   
	const oras = db.collection("oras")  
	oras.field({      //取age、height、obj字段
		_id: false,
		age: true,
		height: true,
		obj: true
	}).orderBy("obj.num", "asc").get().then(res=>{     
		console.log(res)
	})
}


统计
Collection.count(): Promise<Object>

可通过它看一下集合内部有多少记录,方便做其他的(比如分页操作)

oras.count().then(res=>{
	console.log(res)
})



版权声明:本文为weixin_43478592原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。