Node.js 猫鼬种群不工作仅返回[Object]字段
嘿,伙计们,我正在尝试使用Node.js 猫鼬种群不工作仅返回[Object]字段,node.js,mongodb,mongoose,mongoose-schema,mongoose-populate,Node.js,Mongodb,Mongoose,Mongoose Schema,Mongoose Populate,嘿,伙计们,我正在尝试使用mongoose从MongoDB获取一些数据 它甚至没有填充第一层 我会尽力解释下面的情况 我的文档结构如下: Schema[s] - UsersSchema _id : { type: mongoose.Schema.Types.ObjectId }, userData : [{ type: mongoose.Schema.Types.ObjectId, ref: 'DataType' }], - DataTypeSchema _id : { type
mongoose
从MongoDB
获取一些数据
它甚至没有填充第一层
我会尽力解释下面的情况
我的文档结构如下:
Schema[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”]
- 在数据类型>
数据中:[“dataID”,“dataID”]
- 在数据>
desc中:“待定”
User
文档中Data
的desc
字段
我的尝试:
1次尝试
await User.find().populate('userData').lean();
await User.find().populate('userData.data').lean();
响应:它应该填充数据类型
模型。相反,我看到的是[[Object],[Object]]
[{
_id: 5b37aa4638a07505e809191a,
userData: [ [Object], [Object] ],
__v: 0
}]
2次尝试
await User.find().populate('userData').lean();
await User.find().populate('userData.data').lean();
我试着做一些我不知道会做什么的事情:D
响应:现在它返回数据类型的id
[{
_id: 5b37aa4638a07505e809191a,
userData: [ 5b35577759407235a4293020, 5b355fb5f51a0c1de0a3ab3d ],
__v: 0
}]
3次尝试
await User.find().populate('userData').lean();
await User.find().populate('userData.data').lean();
然后在阅读mongoose文档之后:
await User.find().populate({
path: 'userData',
model: 'User',
populate: {
path: 'data',
model: 'DataType',
}
}).lean();
响应:获取空数组userData:[]
[{
_id: 5b37aa4638a07505e809191a,
userData: [ ],
__v: 0
}]
注意:如果我从第一次填充中删除模型:“User”
,我会得到与相同的响应。填充('userData')=[[Object],[Object],
在分配了搜索答案后,我喜欢这样:深度填充,这也是正常的猫鼬填充没有任何效果
为什么我不能在用户
中填充数据类型
,这对我来说毫无意义:(
我希望任何人都能在这种奇怪的情况下帮助我
谢谢第三次尝试时,您的方向几乎是正确的,但您提供了错误的填充模型
这确实是嵌套填充
或深度填充
的问题,正如您所发现的,但填充时需要传递正确的模型
由于用户数据
是数据类型
集合的id
,因此模型
应该是数据类型
,而不是用户
,同样数据
是数据
集合的id
,因此模型
应该是数据
而不是数据类型
。使这些改变它应该按照预期工作
.populate()
中的model
用于告诉mongodb/mongoose
从哪个集合进行填充
试试这个:
await User.find().populate({
path: 'userData',
model: 'DataType',
populate: {
path: 'data',
model: 'Data',
}
}).lean();
此外,由于您也在模式中定义了Ref
,因此实际上不需要在填充
中传递模型
,它将自动知道从哪个集合填充
下面的查询也可以使用:
await User.find().populate({
path: 'userData',
populate: {
path: 'data'
}
}).lean();
希望这有帮助!所以我一直在获取数据:D因为控制台日志没有打印出对象,我认为我没有获取数据:我认为这也可能是问题所在,我只是想澄清一下或者你的错误:D