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