Вы заполняете неправильно.
Ваш путь должен быть items.id
вместо item
, а модель должна быть реальной моделью, а не строкой, поэтому удалите одинарные кавычки и убедитесь, что вы импортируете его как const Post = require("../models/post");
cart = await Cart.findById(req.session.cartId).populate({
path:'items.id',
model:Post
}).exec();
Это даст вам такой результат:
{
"_id": "5e6f2dd63d82e35988921907",
"items": [
{
"_id": "5e6f2dd63d82e35988921909",
"id": {
"_id": "5e6f2da53d82e35988921905",
"title": "Post 1 Title",
"__v": 0
},
"quantity": 1
},
{
"_id": "5e6f2dd63d82e35988921908",
"id": {
"_id": "5e6f2db13d82e35988921906",
"title": "Post 2 Title",
"__v": 0
},
"quantity": 2
}
],
"__v": 0
}
Результат выглядит немного некрасиво из-за поля id, его нелегко прочитать , Поэтому я советую переименовать поле items.id
в items.post
следующим образом:
const cartSchema = new Schema({
items: [
{
post: {
type: Schema.Types.ObjectId,
ref: "Post"
},
quantity: Number
}
]
});
и изменить путь заполнения на items.post
, чтобы результат выглядел следующим образом:
{
"_id": "5e6f2dd63d82e35988921907",
"items": [
{
"_id": "5e6f2dd63d82e35988921909",
"post": {
"_id": "5e6f2da53d82e35988921905",
"title": "Post 1 Title",
"__v": 0
},
"quantity": 1
},
{
"_id": "5e6f2dd63d82e35988921908",
"post": {
"_id": "5e6f2db13d82e35988921906",
"title": "Post 2 Title",
"__v": 0
},
"quantity": 2
}
],
"__v": 0
}