我在填充模式字段时遇到问题,我尝试了无数次,但无法找出问题所在: 功能:
function xyz (req, res) {
User.findOne({_id: req.payload._id })
.populate("ABC.xyzID")
.exec((err, user) => {
if (err) {
return res.json ({'success': false, 'message': 'Could not retrieve ABC.'});
}
console.log(user);
return res.json ({'success': true, 'message': 'ABC fetched successfully', user });
});
}
模式:
const UserSchema = new mongoose.Schema({
name:{
type: String,
required: true,
trim: true
},
ABC:{
xyzID:{
type: mongoose.Schema.Types.ObjectId,
ref: 'xyz'
},
},
LMN:{
yyyID:[{
type: mongoose.Schema.Types.ObjectId,
ref: 'yyy'
}],
EmployeeID:[{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}]
}
});
在这里我可以通过填充它来访问:LMN.yyyID,但它不适用于ABC.xyzID,没有填充,我可以看到xyzID,但格式为_id。所以基本上只是填充不起作用的
答案 0 :(得分:0)
请查看此架构设计。这是用户。
// user.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create schema
const UserSchema = new Schema({
username: {
type: String,
required: true
},
password: {
type: String,
required: true
}
});
module.exports = User = mongoose.model('user', UserSchema);
现在这是活动架构。现在您可以看到我正在从“用户”模式中引用userId。因此,您需要确保您的集合名称和引用名称相同。之后,它应该可以工作。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create schema
const ActivitySchema = new Schema({
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user'
},
text: {
type: String,
required: true
}
});
module.exports = Activity = mongoose.model('activity', ActivitySchema);
然后尝试查询
Activity.findOne({_id: req.payload._id })
.populate('userId')
.then(result => { console.log(result); })
.catch(err => { console.log(err); });
您将在userId对象内看到用户信息。