当前位置: 首页 > 面试题库 >

删除一对一和一对多引用-猫鼬

邓令
2023-03-14
问题内容

我有一个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(

    );
});

问题答案:

关系:

  1. 一个one-to-one is a relationship这样的状态只有一个省会城市和省会城市只有一个州的首府
  2. 一个one-to-many is a relationship使得母亲有许多孩子,和孩子只有一个妈妈
  3. 一个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