【问题标题】:How to use populate in mongoose?如何在猫鼬中使用填充?
【发布时间】:2022-01-28 06:24:43
【问题描述】:

我有两个集合,其中一个包含系统列表,另一个包含连接到系统的电池列表。我想使用填充方法,以便当我使用系统 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

【问题讨论】:

  • 您应该填充 BPID
  • 非常感谢!你是救生员!我是文档引用的新手,我误解了文档。
  • 我猜你已经得到了答案,现在你应该关闭这个问题或发布一个答案(在提出问题 2 天后)解释出了什么问题。这可以防止该问题出现在未回答的问题中,从而帮助网站。

标签: node.js mongodb mongoose


【解决方案1】:

我在填充方法中传递了错误的参数。代码现在可以完美运行。

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

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 2021-04-19
    • 2021-09-27
    • 2016-06-11
    • 2014-03-26
    • 1970-01-01
    • 2020-11-08
    • 2015-07-13
    • 2016-10-10
    相关资源
    最近更新 更多