Mongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本

Posted

技术标签:

【中文标题】Mongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本【英文标题】:Mongoose JS - Populate method not returning full referenced object... - Only returning objectId version 【发布时间】:2017-02-10 19:59:36 【问题描述】:

当我使用填充方法时,我仍然只得到_id。

这是我希望在其中发生的控制器:

show: function(req, res) 
User.findOne(
  _id: req.params.id
)
.populate("roommates")
.exec(function(err, user) 
  if (err) 
    console.log(err);
   else 
    res.json(user.roommates)
  
)

这是我的用户模型,最底部是室友参考:

var UserSchema = new Schema(
  name: String,
  username: 
    type: String,
    required: [true, "Please enter a username"],
    minlength: [6, "Username must be at least 6 characters"],
    maxlength: [15, "Username cannot exceed 15 characters"],
    unique: true
  ,
  password: 
    type: String,
    required: [true, "Please enter a password"],
    minlength: [6, "Password must be at least 6 characters"],
    maxlength: [17, "Password cannot exceed 17 characters"],
  ,
  roommates: [roommate: type: Schema.Types.ObjectId, ref: "User", status: type: String, default: "pending", requests: [description: String, amount: Number], balance: Number]
)

什么给了?我之前已经让这个填充方法在另一个应用程序中工作,但它并没有给我返回引用的对象,只是正常的对象,因为它存在于数组中,没有必要的用户详细信息。

这是响应.. 但 _id 应该填充到带有其他属性(如名称等)的 objetx 中......:

   [
  
    "_id": "57f17d5f51cdcb0b5cefe74d",
    "balance": 0,
    "requests": [],
    "status": "pending"
  
]

【问题讨论】:

【参考方案1】:

roommates 数组中的 roommate 字段是架构中的引用,因此您需要在 populate 调用中使用点符号:

User.findOne(
  _id: req.params.id
)
.populate("roommates.roommate")
.exec(function(err, user)  ...

【讨论】:

但是先生,最奇怪的事情正在发生。您刚刚建议的内容不起作用,但是起作用的是使用“roommates._id”。请问对此有何解释?这让我很困惑。也许即使“roommate(singular)”是具有 ObjectId 引用的那个,因为它嵌套在“ROOMMATES”中,你所要做的就是说“roommates._id”,它知道“roommates”中的这些属性之一有对象引用???我不明白为什么当我使用“roommates._id”时这会起作用 这没有任何意义。我认为我们需要查看minimal reproducible example 来帮助您解决这个问题。

以上是关于Mongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose.js 条件填充

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

有引用时不调用 Mongoose 模型填充回调

有引用时不调用 Mongoose 模型填充回调

Mongoose - 填充删除的空引用?

Mongoose 虚拟填充返回 null