如何使用aggregate()和$ sample获取随机的mongodb文档?

时间:2019-06-08 08:25:50

标签: node.js mongodb fastify

我正在尝试在名为“模板”的集合中获取2个随机文档,但仅收到内部服务器错误。

我已经在mongo shell中成功测试了以下代码:

    db.templates.aggregate([{"$sample":{"size":2}}])

fastify语法是否有问题?

    module.exports = async fastify => {
      fastify.get(
        '/',
        {
          schema: {
            response: {
              200: {
                type: 'object',
                items: {
                  type: 'object',
                  properties: {
                    _id: {
                      type: 'string'
                    }
                  }
                }
              }
            }
          }
        },
        async (req, res) => {
          try {
            const result = this.mongo.db
              .collection('templates')
              .aggregate([{ $sample: { size: 2 } }])
            return await result
          } catch (err) {
            res.internalServerError()
          }
        }
      )
    }

    module.exports.autoPrefix = '/questions'

我收到内部服务器错误,需要2个随机文档。

1 个答案:

答案 0 :(得分:0)

问题在于您的路线的处理程序。

如果使用箭头功能,var flowers = Array.from({length: 10}, function(_, i){ return { base_x: i * 100, base_y: height - 50, stem_h: random(50, 400), col: color( random(0, 255), random(0, 255), random(0, 255) ) }; }); 是上限,而如果您使用简单的功能,this将绑定到fastify实例。

所以您应该更改为:

this

否则,请删除async function (req, res) { try { const result = this.mongo.db // this will work as expected .collection('templates') .aggregate([{ $sample: { size: 2 } }]) .toArray() return await result } catch (err) { res.internalServerError() } }

this