【问题标题】:Mongoose Populate cant get this to work?Mongoose Populate 不能让它工作吗?
【发布时间】:2019-02-04 20:11:57
【问题描述】:

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'
})

猫鼬填充不起作用。

请让我知道我做错了什么或给我一个简单的解释...谢谢...

【问题讨论】:

    标签: node.js mongodb mongoose koa


    【解决方案1】:

    函数 populate() 的参数是你要填充的字段的路径,而且当你在 mongoose 中使用 populate 或任何链式函数时,你必须在结尾使用 exec() 函数,所以正确这样做的方法是:

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

    【讨论】:

      【解决方案2】:

      您可以使用填充来加载子文档,但您需要在小说模式中传递书籍字段的名称,在您的情况下,名称是 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);
      

      以及执行输出:

      【讨论】:

      • 谢谢,这对我帮助很大!干杯!
      猜你喜欢
      • 2018-07-06
      • 2021-06-15
      • 1970-01-01
      • 2018-01-06
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2014-12-01
      相关资源
      最近更新 更多