当我运行下面的代码时,我得到了对象沿着控制台上记录的填充字段。Screenshot
但是,这些字段还没有填充到图书集合中。有人能帮我弄清楚吗?
const bookSchema = new Schema({
title: String,
genre: { type: Schema.Types.ObjectId, ref: "genre" },
author: { type: Schema.Types.ObjectId, ref: "author" },
numberInStock: { type: Number, default: 0 },
rating: Number,
yearPublished: Number,
dateAdded: { type: Date, default: Date.now },
liked: { type: Boolean, default: false },
});
const genreSchema = new Schema({ name: String });
const authorSchema = new Schema({ name: String });
const Book = model("book", bookSchema);
const Genre = model("genre", genreSchema);
const Author = model("author", authorSchema);
const books = [
{
title: "Sapiens",
genre: "632873144b0bbfc10ae1942d",
author: "632873e706fe265eaee77de3",
numberInStock: 6,
rating: 4.4,
yearPublished: 2011,
},
];
async function saveBook(b) {
let book = new Book(b);
book
.save()
.then((result) => {
populateBook(result._id);
})
.catch((err) => console.log("Error: ", err));
}
function populateBook(id) {
Book.findById(id)
.populate("genre")
.populate("author")
.exec((err, book) => {
if (err) {
console.log("Error: ", err);
return;
}
console.log(book);
});
}
books.forEach((b) => {
saveBook(b);
});
1条答案
按热度按时间kmpatx3s1#
这就是population的工作原理,它只存储对数据库中其他文档的引用。在查询时,如果你要求它(使用
.populate()
),Mongoose将检索引用的文档并将它们插入到“父”文档中。如果您希望引用的文档存储在数据库中,则不能使用population,而必须使用subdocuments。
但是,这将限制数据库的灵活性,因为如果需要更改作者姓名,则需要更改数据库中的所有Book文档来更新作者姓名。使用填充,只需更改Author文档。