【问题标题】:While saving parent and child objects in Mongoose, it stores reference of parent, but the parent doesnt store reference to child在 Mongoose 中保存父对象和子对象时,它存储父对象的引用,但父对象不存储对子对象的引用
【发布时间】:2020-07-10 16:52:26
【问题描述】:

简而言之,问题是我正在使用带有以下代码的 Mongoose 在父架构 Blogpost 和子架构 Relatedcomment 中创建和保存数据库条目,但是当我查询它时,父对象的 _id 确实显示在子对象中,但是in the parent object no child shows up at all。换句话说the child knows who the parent is, but the parent doesnt know who is its child。请帮我解决如何到达子对象while querying parent object。代码如下

以下是父对象的架构,即 Blogpost blogpost.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const BlogpostSchema = new mongoose.Schema({

  _id: Schema.Types.ObjectId,
 
  image:String,
  title:String,
  related_comments: [{ type: Schema.Types.ObjectId, ref: 'Relatedcomment' }],
});

mongoose.model('Blogpost', BlogpostSchema);

下面是子对象的架构,即Relatedcomment relatedcomment.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const RelatedcommentSchema = new mongoose.Schema({

  blogpost: { type: Schema.Types.ObjectId, ref: 'Blogpost' }, 

  user_name: String,
  comment: String,
});

mongoose.model('Relatedcomment', RelatedcommentSchema);

下面是我如何保存父对象和子对象。观察我将 _id 传递给 blogpost,它的孩子也传递给 blogpost._id

require('../models/blogpost');
require('../models/relatedcomment');
const Blogpost = mongoose.model('Blogpost');
const Relatedcomment = mongoose.model('Relatedcomment');

// db_object_dict and child_db_object_dict are objects containing key value pairs according to their schemas

const blogpost = new Blogpost( {...db_object_dict, _id: new mongoose.Types.ObjectId()} )
blogpost.save(function (err) {
    if (err) return handleError(err);
            const related_child = new Relatedcomment( {...child_db_object_dict, blogpost: blogpost._id} )
            related_child.save(function (err) {
              if (err) return handleError(err);
            });
        } 
    }

【问题讨论】:

    标签: mongoose mongoose-populate


    【解决方案1】:

    好吧,我解决了它,我解决它的方法是使用下面的代码

    const blogpost = new Blogpost( {...db_object_dict, _id: new mongoose.Types.ObjectId()} )
    blogpost.save(function (err, blogpost) { // passed blogpost as well in arguments
        if (err) return handleError(err);
                const related_child = new Relatedcomment( {...child_db_object_dict, blogpost: blogpost._id} )
    
                related_child.save(function (err) {
                  if (err) return handleError(err);
                });
                // new added line
                blogpost.relatedcomments.push(relatedcomment._id)
            }
            // new added line
            blogpost.save() 
        }
    

    实际上我的错误是我没有在blogpost.relatedcmets数组中推送relatedcomment._id(子id),然后保存它。两者都完成了,我的问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多