收藏
回答

云函数从一个集合中条件查询随机?

table: {
  {
    _id:123132,
    type:"type1"
    msg:""
  },{
    _id:123154,
    type:"type1"
    msg:""
  },{
    _id:123113,
    type:"type2"
    msg:""
  },{
    _id:123134,
    type:"type2"
    msg:""
  }
}

例如数据表结构如上,想要同时(一条查询语句)查询type="type1"的随机一条记录和type="type2"的随机一条记录,分开两次查询已经学会了。如果要一次查询出来应该怎么写呢?

最后一次编辑于  2019-11-03
回答关注问题邀请回答
收藏

4 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-11-03

    请在云函数中使用

    // 云函数入口文件

    const cloud = require('wx-server-sdk')

    cloud.init()

    const db = cloud.database({

        env: '环境ID'

    })

    const _ = db.command

    const $ = db.command.aggregate

    // 云函数入口函数

    exports.main = async(event, context) => {

        let table = '集合名称'

        return db.collection(table).aggregate()

            .addFields({

                match: $.eq(['$type', 'type1'])

            })

            .match({

                match: !0

            })

            .sample({

                size: 1 // 随机取一条type=type1的记录

            })

            .group({

                _id: 'any',

                type1Row: $.push('$$ROOT')

            })

            .lookup({

                from: table,

                pipeline: $.pipeline()

                    .addFields({

                        match: $.eq(['$type', 'type2'])

                    })

                    .match({

                        match: !0

                    })

                    .sample({

                        size: 1 // 随机取一条type=type2的记录

                    })

                    .done(),

                as: 'type2Row',

            })

            .addFields({

                allRows: $.concatArrays(['$type1Row', '$type2Row'])

            })

            .unwind('$allRows')

            .replaceRoot({

                newRoot: '$allRows'

            })

            .end()

    }


    2019-11-03
    赞同 1
    回复 1
    • 官人
      官人
      2019-11-05
      大牛
      2019-11-05
      回复
  • Ulyss
    Ulyss
    2019-11-03

    可以试试是用聚合:

    https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/database/aggregation/stages/sample.html

    2019-11-03
    赞同
    回复
  • 121
    121
    2019-11-03

    where({

    type:db.command.in(["type1","type2"])

    }).limit(2)

    这样呢,不过应该不会随机

    2019-11-03
    赞同
    回复
  • _人世间
    _人世间
    2019-11-03

    where({

    type: _.eq('type1').or(_.eq('type2'))

    })

    2019-11-03
    赞同
    回复 2
    • 官人
      官人
      2019-11-03
      可能是我没表达清楚,我是要找type="type1"的随机一条记录和type="type2"的随机一条记录,相当于是一条语句查到2条随机记录
      2019-11-03
      回复
    • _人世间
      _人世间
      2019-11-03回复官人
      不好意思,我不会了
      2019-11-03
      回复
登录 后发表内容
问题标签