Mongoose Populate 不能让它工作?
Mongoose Populate cant get this to work?
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'
})
猫鼬填充不工作。
请让我知道我做错了什么或者给我一个简单的解释...谢谢...
populate() 函数的参数是你要填充的字段的路径,而且当你使用 populate 或 mongoose 中的任何链式函数时,你必须在结尾使用 exec() 函数,所以正确的做法是:
Novel.findById('5b87310d41073743856a7c4a').populate({
path: 'type'
}).exec()
您使用填充来加载子文档是正确的,但是您需要在小说模式中传递书籍字段的名称,在您的情况下名称是 type .
这是带有一些示例的 link 文档: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);
执行输出:
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'
})
猫鼬填充不工作。
请让我知道我做错了什么或者给我一个简单的解释...谢谢...
populate() 函数的参数是你要填充的字段的路径,而且当你使用 populate 或 mongoose 中的任何链式函数时,你必须在结尾使用 exec() 函数,所以正确的做法是:
Novel.findById('5b87310d41073743856a7c4a').populate({
path: 'type'
}).exec()
您使用填充来加载子文档是正确的,但是您需要在小说模式中传递书籍字段的名称,在您的情况下名称是 type .
这是带有一些示例的 link 文档: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);
执行输出: