Я только что начал с Mon goose и пытаюсь заставить populate () работать на очень простом c примере. В настоящее время у меня есть две модели, модель автомобиля и владельца.
Владелец
const mongoose = require('mongoose')
module.exports = mongoose.model('Owner', mongoose.Schema({
name: String,
cars: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Car' }]
}))
Автомобиль
const mongoose = require('mongoose')
module.exports = mongoose.model('Car', mongoose.Schema({
brand: String
}))
Идея заключается в том, что владелец должен иметь возможность владеть несколько машин. Поэтому я храню ссылку ObjectId для каждого автомобиля в массиве автомобилей владельца.
Owner.findById(ownerId, function (err, owner) {
if (err) console.log(err)
const c = new Car({ brand: 'Toyota' })
owner.cars.push(c)
owner.save()
console.log(owner.cars) // prints out an array containing multiple car _ids, everything working so far
})
Затем я хочу заполнить массив автомобилей данными из Car Model (их бренды). Однако, запустив заполнение ниже, вы получите только один документ [{"_id": "....", "brand": "Toyota", "__v": 0}]. Длина массива равна 1, хотя очевидно, что многие Car-идентификаторы сохраняются, если я проверяю базу данных или просто пропускаю заполненный вызов.
Owner.findById(ownerId).populate('cars').exec(function (err, owner) {
if (err) console.log(err)
console.log(owner) //this only returns one object
})
Что я делаю не так? Как вы можете сказать, я немного запутался и был бы признателен за любую помощь. Спасибо!