Полагаю, вы хотели написать new Schema
вместо new Blog
.
При первом подходе мы встраиваем информацию об авторе в блог следующим образом:
{
"_id": "5e84967e28bc413f14b43fce",
"title": "blog 1 title",
"author": [
{
"_id": "5e84967e28bc413f14b43fd0",
"name": "author 1 name"
},
{
"_id": "5e84967e28bc413f14b43fcf",
"name": "author 2 name"
}
],
"__v": 0
}
когда нам нужен блог и его авторов, мы просто запрашиваем, как это, без использования каких-либо заполнений.
query:
router.get("/blogs/:id", async (req, res) => {
const result = await Blog.findById(req.params.id);
res.send(result);
});
При таком подходе, когда нам нужно обновить информацию об авторе, он будет сложнее, так как они должны обновляться во всех местах.
В ссылочном подходе мы сохраняем только идентификаторы автора в массиве автора блога. Таким образом, документ блога выглядит следующим образом:
{
"title": "blog 1 title",
"author": [
"5e849753cf11581f683012b4",
"5e84975bcf11581f683012b5"
]
}
Примеры документов, на которые ссылаются авторы в коллекции авторов:
{
"_id": "5e849753cf11581f683012b4",
"name": "author 1 name",
"__v": 0
}
{
"_id": "5e84975bcf11581f683012b5",
"name": "author 2 name",
"__v": 0
}
Теперь, если мы хотим получить блог, а его авторы - полные данные, нам нужно использовать заполнение следующим образом:
router.get("/blogs/:id", async (req, res) => {
const result = await Blog.findById(req.params.id).populate("author");
res.send(result);
});
Дать этот результат:
{
"author": [
{
"_id": "5e849753cf11581f683012b4",
"name": "author 1 name",
"__v": 0
},
{
"_id": "5e84975bcf11581f683012b5",
"name": "author 2 name",
"__v": 0
}
],
"_id": "5e849792cf11581f683012b6",
"title": "blog 1 title",
"__v": 0
}
Но при таком подходе обновление данных об авторах будет проще и быстрее.