Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬种群不工作仅返回[Object]字段_Node.js_Mongodb_Mongoose_Mongoose Schema_Mongoose Populate - Fatal编程技术网

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