【问题标题】:Saving ObjectId as reference dose not work in NodeJs MongoDB将 ObjectId 保存为参考在 NodeJs MongoDB 中不起作用
【发布时间】:2021-03-10 08:30:11
【问题描述】:

我要将类别 ID 存储到项目中。

我执行下面的 .save() 函数来添加新行。

const myNewItem = {
    categoryId = ObjectId("5fc0a6e58dc3892120595384"),
    title = "Apple"
}
var myNewItemSave = await new Item(myNewItem).save();

但是,当我检查我的数据库记录时

_id: ObjectId("..."),
categoryId: "5fc0a6e58dc3892120595384",
title: "Apple"

categoryId 未保存为 ObjectId。

我想将它保存为 ObjectId 是因为我要像这样查询一些查找聚合: https://mongoplayground.net/p/50y2zWj-bQ6

所以我必须让 localField 和 foreignField 与 ObjectId 的类型相同。

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    @Ashok 在模型中定义了一个类型,如果你不想修改模型你可以用mongoose.Types.ObjectId“转换”id,例如:

    const mongoose = require('mongoose')
    const myNewItem = {
        categoryId = mongoose.Types.ObjectId("5fc0a6e58dc3892120595384"),
        title = "Apple"
    }
    

    【讨论】:

      【解决方案2】:

      这是因为您的架构不允许类别 id 作为 mongoose objectId 它是字符串

      const schema = new Mongoose.Schema(
        {
          title: { type: String },
          categoryId: { type: Mongoose.Schema.ObjectId, ref: 'categories' }
        },
        { timestamps: true, versionKey: false }
      )
      export default Mongoose.model('Items', schema)
      

      导入 Item 模型并保存会将字符串转换为 mongoose objectId

      const myNewItem = {
        categoryId: "5fc0a6e58dc3892120595384",
        title: "Apple"
      }
      const myNewItemSave = await Item.create(myNewItem);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-06
        • 2023-04-05
        • 2013-05-18
        • 1970-01-01
        • 2014-11-21
        • 2018-06-09
        • 2021-08-19
        • 2020-12-03
        相关资源
        最近更新 更多