【问题标题】:mongoose saving a model with a reference猫鼬用参考保存模型
【发布时间】:2015-01-14 18:53:37
【问题描述】:

我有一个看起来像这样的模型

var UserSchema = new Schema({
    id:                 ObjectId,
    username:           { type: String, trim: true, required: true, unique: true, lowercase: true },
    location:           [{ type: ObjectId, ref: 'Location', required: false }],
    attachments:        [{ type: ObjectId, ref: 'Attachment', required: false }]
})

当用户注册时,我需要先创建位置和附件对象,然后再保存/创建用户以获取这些 ObjectId。我觉得我这样做的方式可能是错误的,这就是为什么它令人困惑或者我缺少一些东西。

我的问题是如何在保存用户集合之前保存这些集合,以便我可以将这些引用包含在我的用户集合中。

类似于这个问题,除了多个参考。

【问题讨论】:

  • 位置和附件文档是否已经存在于数据库中,或者您是否与新用户同时创建了唯一的,或者您需要在创建之前检查它们是否已经存在?
  • @cdbajorin 在创建新用户时创建新用户,我不需要检查附件或位置是否已经存在。
  • 新的LocationAttachment 对象的_id 值立即可用,因为_id 填充在客户端而不是服务器上。
  • @JohnnyHK 是正确的,所以如果我这样做 var newloc = new Location(data); 然后将其分配给用户 user.location = newloc._id; 有效,我想知道我是否做得对或以这种方式使用最佳实践。我觉得它正在将非关系数据库转变为关系数据库,我想尽可能地采用最佳实践。感谢您的评论!
  • 我不确定我理解你为什么这样做。我认为您正在尝试创建太多集合。根据您对我的问题的回答,位置/附件似乎与用户具有 1:1 的关系。那些有任何其他关联或用途吗?为什么要为他们创建收藏?

标签: mongoose mongoose-populate


【解决方案1】:

使用mongoose hooks解决依赖关系。如果您想在保存用户之前获取位置附件,请使用 pre 挂钩,否则请使用 post 挂钩。

【讨论】:

  • 我遇到的问题是我无法访问pre 中的数据我只能通过this 访问与模型相关的任何内容
猜你喜欢
  • 2020-09-05
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 2017-09-13
相关资源
最近更新 更多