Население Мангуста не может заставить это работать? - PullRequest
0 голосов
/ 30 августа 2018

book.schema.js

const mongoose = require('mongoose')
const Schema = mongoose.Schema

const BookSchema = new Schema({
  name: {
    type: String,
    required: true
  }
})

module.exports = BookSchema

book.model.js

const mongoose = require('mongoose')
const BookSchema = require('../schema/book.schema')
const Book = mongoose.model('Book', BookSchema)

module.exports = Book

novel.schema.js

const mongoose = require('mongoose')
const Schema = mongoose.Schema

const NovelSchema = new Schema({
  name: {
     type: String,
     required: true
  },
  type: {
    type: Schema.Types.ObjectId,
    ref: 'Book'
  }
})

module.exports = NovelSchema

novel.model.js

const mongoose = require('mongoose')
const NovelSchema = require('../schema/novel.schema')
const Novel = mongoose.model('Novel', NovelSchema)

module.exports = Novel

запрос

// Mongoose Populate cant get this to work
// I am at a loss
Novel.findById('5b87310d41073743856a7c4a').populate({
  path: 'books'
})

Мангуста не работает。

Пожалуйста, дайте мне знать, что я делаю неправильно, или дайте мне простое объяснение ... Спасибо ...

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы вправе использовать заполнение для загрузки вложенного документа, но вам нужно передать имя поля книги в новой схеме, в вашем случае это имя type .

Вот ссылка на документацию с некоторыми примерами: Mongoose Populate

И ниже есть еще одно решение вашей проблемы:

let book = await new BookModel({name:"book test"}).save();
console.log('-----------BOOK ITEM-------------');
console.log(book);

let novel = await new NovelModel({name:"novel test",type:book._id}).save();
console.log('-----------NOVEL ITEM-------------');
console.log(novel);

let itemPopulated = await NovelModel.findById(novel._id)
    .populate('type')
    .then((result) => {
        return result;
    }).catch((err) => {
        console.log(err);
});
console.log('-----------ITEM POPULATED-------------');
console.log(itemPopulated);

И вывод выполнения:

execution output

0 голосов
/ 30 августа 2018

Параметр функции populate () - это путь к полю, которое вы хотите заполнить, а также, когда вы используете заполнение или любую цепочечную функцию в mongoose, вы должны использовать функцию exec () в конце, поэтому правильный способ сделать это будет:

Novel.findById('5b87310d41073743856a7c4a').populate({
  path: 'type'
}).exec()
...