云函数中两个集合关联条件查询怎么写?
发布于 5 年前 作者 yangcui 12782 次浏览 来自 官方Issues
table1 {

  {

   _id:1a2b,

    hit:2,

    point: [114,25],

 }

}
table2 {

  {

  _id:1a3d,

    tid:1a2b,

    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))

云开发不支持连表查询

回到顶部