【问题标题】:Mongoose JS - Populate method not returning full referenced object... - Only returning objectId versionMongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本
【发布时间】: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"
  }
]

【问题讨论】:

    标签: node.js mongodb express mongoose database


    【解决方案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 来帮助您解决这个问题。
    猜你喜欢
    • 2021-01-02
    • 2013-06-30
    • 1970-01-01
    • 2018-11-23
    • 2020-11-11
    • 2017-05-19
    • 2017-10-26
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多