我有一个Assignment schema
提及Groups
和的内容Projects
。
Assignment == Group [One-One Relationship]
Assignment == Projects [One-Many Relationship]
以下是我的Asssignment
架构
var AssignmentSchema = new Schema({
name: String,
group: {
type: Schema.Types.ObjectId,
ref: 'Group'
},
projects: [{type: mongoose.Schema.Types.ObjectId, ref: 'Project'}],
});
如果a Group/Project
被删除,我该如何更新我的分配模式。
var ProjectSchema = new Schema({
name: String
});
var GroupSchema = new Schema({
name: String
});
从stackoverflow中的几个答案中,我了解了有关删除中间件的信息,但是我不确定如何为one-one and one- many
关系实现它。谁能给我示范一个例子。
ProjectSchema.pre('remove', function(next){
this.model('Assignment').update(
);
});
关系:
one-to-one is a relationship
这样的状态只有一个省会城市和省会城市只有一个州的首府one-to-many is a relationship
使得母亲有许多孩子,和孩子只有一个妈妈many-to-many is a relationship
这样的一本书可以由几个作者或合着者写的,而一个作者可以写几本书。一对一关系- 如果Project/Group
删除了a ,如何更新我的Assignment
架构。
通常,您将一个project
映射到一个,assignment
并且类似地将一个assignment
映射到一个project
。您可以在此处执行的操作是删除项目,然后project
在分配模型中找到关联的对象并删除其引用。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: project.assignment}},
{$pull: {projects: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
一对多关系- 如果Project/Group
删除了a ,如何更新我的Assignment
架构。
在这种情况下,我们将删除一个项目,然后查找所有assignments
属于该项目的项目,并从中project
删除其引用。在这种情况下,单个项目可能会有很多分配。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
Assignment.update({_id: {$in: project.assingments}},
{$pull: {project: project._id}},
function (err, numberAffected) {
console.log(numberAffected);
} else {
console.log(err);
}
});
});
});
}
删除中间件
您可以middleware
通过Johnny指出的方法实现相同的目的,只是对此进行了更正。
ProjectSchema.pre('remove', function (next) {
var project = this;
project.model('Assignment').update(
{ projects: {$in: project.assignments}},
{ $pull: { project: project._id } },
{ multi: true },
next
);
});
通常情况下,可能有许多projects
属于,assignment
而许多assignments
属于同一project
。模式中将有一个assignment
列,Project
其中一个项目将与多个分配相关。
注意:
删除中间件将不适用于模型,而仅适用于您的文档。如果要使用remove
中间件,请确保在delete函数中project
先找到id,然后在返回的值上document
应用remove方法,以便上面的方法起作用…
delete函数将如下所示。
delete: function(req, res) {
return Project.findById(req.params.id, function(err, project){
return project.remove(function(err){
if(!err) {
console.log(numberAffected);
}
});
});
}
问题内容: 好的,所以这可能是一个琐碎的问题,但是我在可视化和理解差异以及何时使用它们方面遇到困难。对于诸如单向和双向映射之类的概念如何影响一对多/多对多关系,我也还不清楚。我现在正在使用Hibernate,因此任何与ORM相关的解释都将有所帮助。 举例来说,我有以下设置: 那么在这种情况下,我将进行哪种映射?对于这个特定示例的答案肯定会受到赞赏,但我也确实希望获得何时使用一对多和多对多以及何时使
问题内容: 我在Hibernate参考书的第21章中有一个基本的一对多关系父母/子女。 级联仅从子级到父级(持久级联仅是因为删除子级后我不希望删除父级)。 当我向父级添加一个子级并保存该子级时,我有一个TransientObjectException … 但是在saveOrUpdate上,我有以下异常: 我真的不明白,因为拯救孩子应该通过级联来拯救父母……有什么想法吗? 更新1 该问题似乎与“ o
这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统
我有两个类和,它们具有一对多关系。 假设我已经在我的数据库结构中持久化了,如下所示: ---编辑--- 实体不是什么花哨的东西,比如:
问题内容: 我的猫鼬模式之一是多对多关系: 如果我删除了一个组,是否仍然可以从所有用户的“组”数组中删除该组objectId? 问题答案: 您正在为此使用中间件。在中间件功能中,是否删除了组实例,您可以通过其方法访问其他模型。因此,您可以执行以下操作: 或者,如果您要支持组实例中的字段可能不完整的情况,则可以执行以下操作: 但正如WiredPrairie所指出的那样,对于此选项,您需要一个索引才能
问题内容: 在我的elasticsearch服务器中,我只有一个索引。 (博客)索引包含多种类型。 如:,。 在标签类型中,我创建了1000多个标签,并在帖子类型中创建了10个帖子。 例如:帖子 例如:标签 我想将现有标签分配给博客帖子(即,关系=>映射)。 如何将标签分配给帖子映射? 问题答案: 您可以在Elasticsearch中使用4种方法来管理关系。在Elasticsearch博客文章-E