如何在猫鼬中使用population



我有两个集合,其中一个保存系统列表,另一个保存连接到系统的电池列表。我想使用populate方法,这样当我使用系统id运行查询时,它会显示电池的详细信息。我的系统和电池架构如下。

const mongoose = require('mongoose');
const { Schema } = mongoose;
const SystemSchema = new Schema(
{
serialNumber: String,
location: String,
BPIDs: [
{
type: Schema.Types.ObjectId,
ref: 'batteryPack'
}
]
},
{
timestamps: true
}
);
const Systems = mongoose.model('system', SystemSchema);
module.exports = Systems;

我的电池型号如下:

const mongoose = require('mongoose');
const { Schema } = mongoose;
const batteryPackSchema = new Schema(
{
systemSerialNumber: String,
batteryID: Number,
batteryVoltage: Number,
totalCurrent: Number,
stateOfCharge: Number
{
timestamps: true
}
);
const BatteryPacks = mongoose.model('batteryPack', batteryPackSchema);
module.exports = BatteryPacks;

我的查询路线如下:

router.get('/details/:id', async (req, res) => {
try {
const deviceDetails = await Systems.findOne({ _id: req.params.id }).populate('batteryPack').lean();
return res.status(200).send({
deviceDetails
});
} catch (error) {
return res.status(500).send(error.stack);
}
});

在通过邮递员运行查询时,它显示以下错误:

MongooseError:无法填充路径batteryPack,因为它不在您的架构中。将strictPopulate选项设置为false以覆盖。在getModelsMapForPopulate

我在populate方法中传递了错误的参数。代码现在工作得很完美。

const deviceDetails = await Systems.findOne({ _id: req.params.id }).populate('BPIDs').lean();
const deviceDetails = await Systems.findOne({ _id: req.params.id },{},{
populate: { path: 'BPIDs' },
lean: true,
})

最新更新