我的猫鼬模式之一是多对多关系:
var UserSchema = new Schema({
name : String,
groups : [ {type : mongoose.Schema.ObjectId, ref : 'Group'} ]
});
var GroupSchema = new Schema({
name : String,
users : [ {type : mongoose.Schema.ObjectId, ref : 'User'} ]
});
如果我删除了一个组,是否仍然可以从所有用户的“组”数组中删除该组objectId?
GroupSchema.pre('remove', function(next){
//Remove group._id from all the users
})
您正在为此使用'remove'
中间件。在中间件功能中,this
是否删除了组实例,您可以通过其model
方法访问其他模型。因此,您可以执行以下操作:
GroupSchema.pre('remove', function(next){
this.model('User').update(
{_id: {$in: this.users}},
{$pull: {groups: this._id}},
{multi: true},
next
);
});
或者,如果您要支持users
组实例中的字段可能不完整的情况,则可以执行以下操作:
GroupSchema.pre('remove', function(next){
this.model('User').update(
{groups: this._id},
{$pull: {groups: this._id}},
{multi: true},
next
);
});
但正如WiredPrairie所指出的那样,对于此选项,您需要一个索引groups
才能获得良好的性能。
问题内容: 我有一个提及和的内容。 以下是我的架构 如果a 被删除,我该如何更新我的分配模式。 从stackoverflow中的几个答案中,我了解了有关删除中间件的信息,但是我不确定如何为关系实现它。谁能给我示范一个例子。 问题答案: 关系: 一个这样的状态只有一个省会城市和省会城市只有一个州的首府 一个使得母亲有许多孩子,和孩子只有一个妈妈 一个这样的一本书可以由几个作者或合着者写的,而一个作者
问题内容: 我的意思不是删除一个或多个文件。我的意思是完全删除该模型,以便猫鼬不再意识到它。声明模型后,我不知道如何使猫鼬忘记该模型,以便可以重新创建它。 目前,上面引发了一个异常。 OverwriteModelError:编译后无法覆盖“ Book”模型。 我希望能够做这样的事情… …并且没有任何错误。有任何想法吗? 问题答案: 试试这个 然后重新注册/重新初始化它。它将正常工作
问题内容: 我在我的数据库3个表:,和 学生可以有多个课程,课程可以有多个学生。和之间存在多对多关系。 我为我的项目和课程添加了3个案例。 (a)当我添加用户时,它会保存得很好, (b)当我为学生添加课程时,它会在-预期行为中创建新的行。 (三)当我试图删除学生,则在删除适当的记录和,但它也删除其中不需要的记录。即使课程中没有任何用户,我也希望课程在那里。 下面是我的表和注释类的代码。 这是Hib
我知道在最新版本的Mongoose中,您可以将多个文档传递给create方法,在我的例子中,甚至可以传递一个文档数组。 我的问题是数组的大小是动态的,所以在回调中创建一个对象数组会很有帮助。 文档中没有,但这样做可能吗?
问题内容: 我在我的数据库3个表:,和 学生可以有多个课程,课程可以有多个学生。和之间存在多对多关系。 我为我的项目和课程添加了3个案例。 (a)当我添加用户时,它会保存得很好, (b)当我为学生添加课程时,它将在-预期行为中再次创建新行。 (三)当我试图删除学生,则在删除适当的记录和,但它也删除其中不需要的记录。即使课程中没有任何用户,我也希望课程在那里。 下面是我的表和注释类的代码。 这是Hi
问题内容: 我有两个与多对多关联的表。 —数据库片段: 加载 ID 名称 会话 ID 日期 sessionsloads LoadId 的SessionID —hibernate映射片段: 为了从关联表 sessionloads中 删除一个条目,我执行以下代码: 但是,启动后,此代码将保持不变。 删除关联的正确方法是什么? 问题答案: 您需要更新和之间的链接的两端: 实际上,许多开发人员使用防御性方