嘿,我正在尝试使用mongoose
中的MongoDB
来获取一些数据。
它甚至没有填充第一级。
我会尽力解释以下情况。
我的文档结构如下:
架构
- UsersSchema
_id : { type: mongoose.Schema.Types.ObjectId },
userData : [{ type: mongoose.Schema.Types.ObjectId, ref: 'DataType' }],
- DataTypeSchema
_id : { type: mongoose.Schema.Types.ObjectId },
data : [{ type: mongoose.Schema.Types.ObjectId, ref:'Data' }],
- DataSchema
_id : { type: mongoose.Schema.Types.ObjectId },
desc: String
填充数据:
userData : ["dataTypeID" , "dataTypeID" ]
data : ["dataID" , "dataID" ]
desc: "pending"
问题:
我正试图在我的desc
文档中获取Data
的{{1}}字段。
我尝试过的事情:
1次尝试
User
响应:应该填充await User.find().populate('userData').lean();
模型。相反,我正在看DataType
,
[ [Object], [Object] ]
2次尝试
[{
_id: 5b37aa4638a07505e809191a,
userData: [ [Object], [Object] ],
__v: 0
}]
我试图做一些我不知道会做的事情:D
response:现在它返回await User.find().populate('userData.data').lean();
模型的ID
DataType
3次尝试
然后阅读了猫鼬的文档:
[{
_id: 5b37aa4638a07505e809191a,
userData: [ 5b35577759407235a4293020, 5b355fb5f51a0c1de0a3ab3d ],
__v: 0
}]
响应:得到空数组await User.find().populate({
path: 'userData',
model: 'User',
populate: {
path: 'data',
model: 'DataType',
}
}).lean();
userData : []
注释:如果我从第一个填充中删除了[{
_id: 5b37aa4638a07505e809191a,
userData: [ ],
__v: 0
}]
,我得到的响应与model: 'User'
在分配答案之后,我很喜欢mongoose-deep-populate来填充人口稠密的东西,这也像正常的猫鼬一样毫无作用。
对我来说,为什么我什至不能在.populate('userData') = [ [Object], [Object] ],
中填充DataType
才是没有道理的:(
我希望有人在这种奇怪的情况下能帮助我。
谢谢
答案 0 :(得分:0)
您的第三次尝试几乎可以朝正确的方向前进,但是您输入了错误的模型。
您发现这确实是nested population
或deep population
的问题,但是在填充时您需要传递正确的model
,
由于userData
是_id
集合中的DataType
,因此model
应该是DataType
而不是User
,与{{1} }是data
集合中的_id
,Data
应该是model
而不是Data
。进行这些更改,它应该会按预期工作。
DataType
中的model
是要告诉.populate()
从哪个集合中进行填充。
尝试一下:
mongodb/mongoose
此外,由于您还已经在模式中定义了await User.find().populate({
path: 'userData',
model: 'DataType',
populate: {
path: 'data',
model: 'Data',
}
}).lean();
,因此实际上不需要在Ref
中传递model
,它将自动知道要从哪个集合中进行填充
下面的查询也应该工作:
populate
希望这会有所帮助!