Node.js 猫鼬不能做深呼吸
我已经: UserSchema中的用户模型 来自SpecialtySchema的专业模型 SessionSchema中的会话模型 用户具有参考字段专业: 会话具有引用字段提供程序: 我想得到一个会话列表,其中包含通过提供者填充的提供者用户和深度填充的特殊项 我正在做以下工作:Node.js 猫鼬不能做深呼吸,node.js,mongoose,mongoose-schema,mongoose-populate,Node.js,Mongoose,Mongoose Schema,Mongoose Populate,我已经: UserSchema中的用户模型 来自SpecialtySchema的专业模型 SessionSchema中的会话模型 用户具有参考字段专业: 会话具有引用字段提供程序: 我想得到一个会话列表,其中包含通过提供者填充的提供者用户和深度填充的特殊项 我正在做以下工作: Session .find() .populate({ path: 'provider', model: 'User', populate: { path: 'specialit
Session
.find()
.populate({
path: 'provider',
model: 'User',
populate: {
path: 'specialities',
model: 'Specialty',
}
})
但是,当我尝试通过provider.specialities而不是填充的版本访问ID时,结果总是返回一个ID数组
专业是一个关键词吗
我不知道为什么这就像根本不填充一样。快速解决方法是使用
在每个模式中,将其作为插件附加:
const deepPopulate = require('mongoose-deep-populate')(mongoose);
SessionSchema.plugin(deepPopulate, {
whitelist: ['provider', 'provider.specialities']
});
然后像这样使用它:
const Session = mongoose.model('Session');
cons user = await Session.findById(id here)
.deepPopulate(['provider', 'provider.specialities']);
由于可能存在性能问题,我不建议进行深度填充
最好尝试重新思考您的数据
我也无法想象它的用例
也许你只是想显示带有特色的用户列表
从前端执行两个api调用怎么样:
1st for taking sessions and taking provider ids (ex.: GET /sessions),
2nd for taking users with populated specialities (ex.: GET /users?ids=first-id,second-id...)
或:
请粘贴您的方案深度人口在哪里?简单的mongoose.model'User.findByIdid在这里。填充'specialities'。。。诸如此类……我想对于病房里的猫鼬4版,你们可以像这样深入居住。填充{path:'provider',model:'User',populate:{path:'specialities',model:'speciality',}}}@num8er,这对正常人群有效,但是,当我试图深入填充会话模型的提供者的特性时,它却没有work@DarkArtistry您可以在尝试深入填充会话模型的提供者的特性的地方添加代码吗?我将使用该解决方案,而不需要额外的库,谢谢
const Session = mongoose.model('Session');
cons user = await Session.findById(id here)
.deepPopulate(['provider', 'provider.specialities']);
1st for taking sessions and taking provider ids (ex.: GET /sessions),
2nd for taking users with populated specialities (ex.: GET /users?ids=first-id,second-id...)
let sessions = await Session.find();
let providerIds = sessions.map(session => session.provider);
let users = await User.find({_id: providerIds}).populate('specialities');
sessions = sessions.map(session => {
session.provider = users.find(user => user._id == session.provider);
return session;
});