小程序
小游戏
企业微信
微信支付
扫描小程序码分享
table1 {
{
_id:1a2b,
hit:2,
point: [114,25],
}
table2 {
_id:1a3d,
tid:1a2b,
get: 2,
get
: 2,
如上两个数据表集合,table2中的tid关联table1中的_id,我需要查询两种情况:
1、table2中满足hit>0,get>0,point在10公里范围内的随机3个结果;
2、table2中满足hit>0,get>0,point在10公里范围内的数量;
以上两种要怎么查询?聚合运算看不太懂,两个表中都有筛选条件的不知道怎么加上去
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
// 云函数入口函数
exports.main = async(event, context) => {
const _ = db.command
const $ = db.command.aggregate
let getQuery = (point)=>{
return db.collection('table1').aggregate()
.geoNear({
distanceField: 'distance',
near: point, // db.Geo.Point对象,如 db.Geo.Point(113.3089506, 23.0968251),
spherical: true,
minDistance: 0,
maxDistance: 10000, // 距离point 10公里范围内
query: {
hit: $.gt(0), // hit > 0
})
.lookup({
from: 'table2',
localField: '_id',
foreignField: 'tid',
as: 'list'
.unwind('$list')
.addFields({
tid: '$list.tid',
get: '$list.get',
.match({
get: $.gt(0) // get > 0
.project({
_id: true,
point: 1,
hit: 1,
get: 1,
distance: 1
},
// 统计记录数
count = await getQuery(event.point).count('count').end(),
// 随机3条记录
rows = await getQuery(event.point).sample({size: 3}).end()
return {
count: count.hasOwnProperty('list') && count.list.length == 1 ? count.list[0].count || 0 : 0,
list: rows.hasOwnProperty('list') ? rows.list : []
===========
小程序端
wx.cloud.callFunction({
name: '云函数名称',
data: {
point: db.Geo.Point(113.3089506, 23.0968251)
}).then(res => console.log(res))
.catch(err => console.error(err))
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
云开发不支持连表查询
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
// 云函数入口函数
exports.main = async(event, context) => {
const _ = db.command
const $ = db.command.aggregate
let getQuery = (point)=>{
return db.collection('table1').aggregate()
.geoNear({
distanceField: 'distance',
near: point, // db.Geo.Point对象,如 db.Geo.Point(113.3089506, 23.0968251),
spherical: true,
minDistance: 0,
maxDistance: 10000, // 距离point 10公里范围内
query: {
hit: $.gt(0), // hit > 0
}
})
.lookup({
from: 'table2',
localField: '_id',
foreignField: 'tid',
as: 'list'
})
.unwind('$list')
.addFields({
tid: '$list.tid',
get: '$list.get',
})
.match({
get: $.gt(0) // get > 0
})
.project({
_id: true,
point: 1,
hit: 1,
get: 1,
distance: 1
})
},
// 统计记录数
count = await getQuery(event.point).count('count').end(),
// 随机3条记录
rows = await getQuery(event.point).sample({size: 3}).end()
return {
count: count.hasOwnProperty('list') && count.list.length == 1 ? count.list[0].count || 0 : 0,
list: rows.hasOwnProperty('list') ? rows.list : []
}
}
===========
小程序端
wx.cloud.callFunction({
name: '云函数名称',
data: {
point: db.Geo.Point(113.3089506, 23.0968251)
}
}).then(res => console.log(res))
.catch(err => console.error(err))
云开发不支持连表查询
.geoNear({near: point,minDistance: 0,maxDistance: 8000,})
.match({hit: _.gt(0)})
.lookup({from: 'table2',localField: '_id',foreignField: 'tid',as: 'list',})
.end()
这样只是加了table1的条件,table2的条件我不知道能不能加?要怎么加?