猫鼬人口无法返回[Object],而不能返回字段

时间:2018-06-30 18:44:54

标签: node.js mongodb mongoose mongoose-schema mongoose-populate

嘿,我正在尝试使用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才是没有道理的:(

我希望有人在这种奇怪的情况下能帮助我。

谢谢

1 个答案:

答案 0 :(得分:0)

您的第三次尝试几乎可以朝正确的方向前进,但是您输入了错误的模型。

您发现这确实是nested populationdeep population的问题,但是在填充时您需要传递正确的model

由于userData_id集合中的DataType,因此model应该是DataType而不是User,与{{1} }是data集合中的_idData应该是model而不是Data。进行这些更改,它应该会按预期工作。

DataType中的model是要告诉.populate()从哪个集合中进行填充。

尝试一下:

mongodb/mongoose

此外,由于您还已经在模式中定义了await User.find().populate({ path: 'userData', model: 'DataType', populate: { path: 'data', model: 'Data', } }).lean(); ,因此实际上不需要在Ref中传递model,它将自动知道要从哪个集合中进行填充

下面的查询也应该工作:

populate

希望这会有所帮助!