代码之家  ›  专栏  ›  技术社区  ›  Sim

猫鼬种群不工作只返回[object]不返回字段

  •  0
  • Sim  · 技术社区  · 8 年前

    嘿,伙计们,我想用 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"

    问题是:

    我正试图得到 desc 领域 Data 在我的 User 文件。

    我试过的:

    一次尝试

    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

    回应:现在它返回 数据类型 模型

    [{
       _id: 5b37aa4638a07505e809191a,
        userData: [ 5b35577759407235a4293020, 5b355fb5f51a0c1de0a3ab3d ],
        __v: 0
    }]
    

    三试

    然后在阅读Mongoose文档之后:

    await User.find().populate({
      path: 'userData',
      model: 'User',
      populate: {
        path: 'data',
        model: 'DataType',
      }
    }).lean();
    

    响应:get,空数组 userData : []

    [{
     _id: 5b37aa4638a07505e809191a,
     userData: [ ],
     __v: 0
    }]
    

    笔记 :如果我移除 model: 'User' 从第一次填充得到的响应与 .populate('userData') = [ [Object], [Object] ],

    经过大量的调查,我喜欢这样: mongoose-deep-populate 深填充也像正常的猫鼬填充一样,完全没有效果。

    我不明白为什么我不能 数据类型 在 用户 :。(

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

    谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   Ravi Shankar Bharti    8 年前

    第三次尝试的方向几乎是正确的,但是您给出了错误的模型来填充。

    这确实是一个问题 nested population 或 deep population ,正如你发现的,但是你需要通过正确的 model 在填充时,

    自从 userData 是一个 _id 属于 DataType 收藏,收藏 模型 应该是 数据类型 而不是 User ,同样 data 是一个 _身份证 属于 Data 收藏,收藏 模型 应该是 数据 不 数据类型 是的。进行这些更改,它应该按预期工作。

    模型 在里面 .populate() 就是说 mongodb/mongoose 从哪个集合填充它。

    试试这个:

    await User.find().populate({
      path: 'userData',
      model: 'DataType',
      populate: {
        path: 'data',
        model: 'Data',
      }
    }).lean();
    

    另外,既然你已经定义了 Ref 在模式中,实际上不需要通过 模型 在 populate ,它将自动知道要从哪个集合填充。

    下面的查询也应该有效:

    await User.find().populate({
      path: 'userData',
      populate: {
        path: 'data'
      }
    }).lean();
    

    希望这有帮助!