猫鼬种群无法正常返回 [Object],但不返回字段
Mongoose Population not working returning [Object] only not the fields
大家好,我正在尝试使用 mongoose
从 MongoDB
获取一些数据。
它甚至没有填充第一级。
我会尽力解释下面的情况。
我的文件结构如下:
架构[s]
- 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"
问题:
我正在尝试在我的 User
文档中获取 Data
的 desc
字段。
我试过的:
1次尝试
await User.find().populate('userData').lean();
响应:它应该填充 DataType
模型。相反,我正在查看 [ [Object], [Object] ]
、
[{
_id: 5b37aa4638a07505e809191a,
userData: [ [Object], [Object] ],
__v: 0
}]
2次尝试
await User.find().populate('userData.data').lean();
我试图做一些我不知道它会做什么的事情:D
响应:现在它 returns DataType
模型的 ID
[{
_id: 5b37aa4638a07505e809191a,
userData: [ 5b35577759407235a4293020, 5b355fb5f51a0c1de0a3ab3d ],
__v: 0
}]
3次尝试
然后在阅读猫鼬文档后:
await User.find().populate({
path: 'userData',
model: 'User',
populate: {
path: 'data',
model: 'DataType',
}
}).lean();
响应:得到空数组userData : []
[{
_id: 5b37aa4638a07505e809191a,
userData: [ ],
__v: 0
}]
注意 :如果我从第一个填充中删除 model: 'User'
我得到与 .populate('userData') = [ [Object], [Object] ],
相同的响应
在搜索答案后,我喜欢这个:mongoose-deep-populate 深入填充,它也像普通的猫鼬填充一样工作,根本没有效果。
我什至无法在 User
中填充 DataType
:(
我希望有人能在这种奇怪的情况下帮助我。
谢谢
您在第三次尝试中几乎是朝着正确的方向前进,但是您提供了错误的填充模型。
这确实是nested population
或deep population
的问题,正如你发现的,但你需要在填充时传递正确的model
,
因为 userData
是 DataType
集合的 _id
,model
应该是 DataType
而不是 User
,类似地 data
是 Data
集合的 _id
,model
应该是 Data
而不是 DataType
。进行这些更改,它应该会按预期工作。
model
in .populate()
是告诉 mongodb/mongoose
从哪个集合填充它。
试试这个:
await User.find().populate({
path: 'userData',
model: 'DataType',
populate: {
path: 'data',
model: 'Data',
}
}).lean();
此外,由于您在模式中也定义了 Ref
,因此您实际上不需要在 populate
中传递 model
,它会自动知道要传递给哪个集合填充自。
下面的查询也应该有效:
await User.find().populate({
path: 'userData',
populate: {
path: 'data'
}
}).lean();
希望对您有所帮助!
大家好,我正在尝试使用 mongoose
从 MongoDB
获取一些数据。
它甚至没有填充第一级。
我会尽力解释下面的情况。
我的文件结构如下:
架构[s]
- 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"
问题:
我正在尝试在我的 User
文档中获取 Data
的 desc
字段。
我试过的:
1次尝试
await User.find().populate('userData').lean();
响应:它应该填充 DataType
模型。相反,我正在查看 [ [Object], [Object] ]
、
[{
_id: 5b37aa4638a07505e809191a,
userData: [ [Object], [Object] ],
__v: 0
}]
2次尝试
await User.find().populate('userData.data').lean();
我试图做一些我不知道它会做什么的事情:D
响应:现在它 returns DataType
模型的 ID
[{
_id: 5b37aa4638a07505e809191a,
userData: [ 5b35577759407235a4293020, 5b355fb5f51a0c1de0a3ab3d ],
__v: 0
}]
3次尝试
然后在阅读猫鼬文档后:
await User.find().populate({
path: 'userData',
model: 'User',
populate: {
path: 'data',
model: 'DataType',
}
}).lean();
响应:得到空数组userData : []
[{
_id: 5b37aa4638a07505e809191a,
userData: [ ],
__v: 0
}]
注意 :如果我从第一个填充中删除 model: 'User'
我得到与 .populate('userData') = [ [Object], [Object] ],
在搜索答案后,我喜欢这个:mongoose-deep-populate 深入填充,它也像普通的猫鼬填充一样工作,根本没有效果。
我什至无法在 User
中填充 DataType
:(
我希望有人能在这种奇怪的情况下帮助我。
谢谢
您在第三次尝试中几乎是朝着正确的方向前进,但是您提供了错误的填充模型。
这确实是nested population
或deep population
的问题,正如你发现的,但你需要在填充时传递正确的model
,
因为 userData
是 DataType
集合的 _id
,model
应该是 DataType
而不是 User
,类似地 data
是 Data
集合的 _id
,model
应该是 Data
而不是 DataType
。进行这些更改,它应该会按预期工作。
model
in .populate()
是告诉 mongodb/mongoose
从哪个集合填充它。
试试这个:
await User.find().populate({
path: 'userData',
model: 'DataType',
populate: {
path: 'data',
model: 'Data',
}
}).lean();
此外,由于您在模式中也定义了 Ref
,因此您实际上不需要在 populate
中传递 model
,它会自动知道要传递给哪个集合填充自。
下面的查询也应该有效:
await User.find().populate({
path: 'userData',
populate: {
path: 'data'
}
}).lean();
希望对您有所帮助!