表结构如下,其中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)
至此问题解决,有遇到同样问题的伙伴们,可以参考一下。