mongoose管道查询match匹配外键id的问题

 0 0条评论

表结构如下,其中catalog字段是使用QACatalog中的外键。

catalog: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'QACatalog'
    },
type: {
    type: String,
    required: [true, 'type不能为空']
    },

项目中需要获取随机数据,通过管道的sample方法来实现,代码如下:

    /**
    * 根据目录ID和类型,获得随机数量的题目列表
    * @param {*} catalog
    * @param {*} type 
    * @param {*} count 
    */
    findByCatalog(catalog, type, count) {
        return QandAModel.aggregate().match({
            catalog,
            type
        }).sample(count)
    }

这里神奇的事情发生了,当传入正确catalog和type参数时,无论如何都不显示数据。

const result=await Q.findByCatalog('6244273ad4b3a8b35873da00','torf',6)

后来我尝试把catalog匹配去掉,只保留type,则可以正常或许数据,然后我把type匹配去掉,只保留catalog,则无论如何都无法获取数据。

最后找到原因,match中的catalog不能直接传递字符串,必须使用ObjectId类型构造一下,如下:

catalog:new mongoose.Types.ObjectId(catalog)

至此问题解决,有遇到同样问题的伙伴们,可以参考一下。


本文作者:双黑

版权声明:本站文章欢迎链接分享,禁止全文转载!

游客