mongolass是根据 Mongoose编写的,用 populate 时,不能这样用
populate('author comments', 'name age content -_id')
这个 Mongoose 可以,但是对于 mongolass 不适合。
mongolass,正确用法:
User.findOne().populate({path: 'avatar', model: 'Avatar'})
必须要传入 path 和 model 才行。path是 User 表里 avatar 的字段,Avatar 是 avatar 对应的数据表。
例如:
User 表
{
avatar: {type: Mongolass.Types.ObjectId,ref:"Avatar"}
}
Avatar 表
{
name:{type:'string'},
title:{type:'string'}
}
为什么mongolass只能这样用,看源码:
如果没有这两个参数,会直接报错
function bindPopulate(results, opt) {
if (!opt.path || !opt.model) {
throw new TypeError('No .populate path or model');
}
问题二
那么mongolass支持数组类型吗,我的答案是不支持
修改 user 表,把 avatar 修改为一个数组
{
avatar: [{type: Mongolass.Types.ObjectId,ref:"Avatar"}]
}
那么我再应用同意的语句时User.findOne().populate({path: 'avatar', model: 'Avatar'})
,已经不支持了,为什么呢?还是看源码。
if (!opt.path || !opt.model) {
throw new TypeError('No .populate path or model');
}
if (!results.length) {
return results;
}
let keys = _.map(results, opt.path);
let query = opt.match || {};
let options = {};
let omitId = false;
query._id = { $in: keys };
关键是这个 let keys = _.map(results, opt.path);
,如果用数组,这个 keys 的输出结果是[[‘5bc588993da03c4a7498fef5’]],这个语句会把数组再嵌套一层,所以下面的语句就都不对了。
总上
关于mongolass的 populate 用法,不能定义数组,只能一一对应。
User 表
{
avatar: {type: Mongolass.Types.ObjectId,ref:"Avatar"}
}
用法:必须有 path 和 model 两个参数
User.findOne().populate({path: 'avatar', model: 'Avatar'})