При сохранении родительских и дочерних объектов в Mongoose он сохраняет ссылку на родителя, но родитель не хранит ссылку на дочерний элемент.

В двух словах проблема заключается в том, что я использую 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.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 в сообщение в блоге, а также его дочерний элемент в качестве сообщения в блоге._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);
            });
        } 
    }

person Arsalan Ahmad Ishaq    schedule 10.07.2020    source источник


Ответы (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() 
    }

На самом деле моя ошибка заключалась в том, что я не запихнул relatedcomment._id (идентификатор дочернего элемента) в массив blogpost.relatedcomments, а затем не сохранил его. Сделано и то и другое, и моя проблема решена.

person Arsalan Ahmad Ishaq    schedule 10.07.2020