【问题标题】:Mongo: reference to _id Field of another document within the same collectionMongo:引用同一集合中另一个文档的_id字段
【发布时间】:2021-02-22 01:25:10
【问题描述】:

我刚刚开始在 MongoDB 中迈出第一步,所以如果我的问题对你来说听起来有点愚蠢,请原谅。我真的尽力在谷歌上搜索答案,但到目前为止还没有找到。

我想问一下处理以下情况的最佳做法是什么。例如,我收集了“公司”(表示法人实体列表)。其中的每个文档都将具有相同的公共字段,例如“name_official”、“name_short”、“name_group”、“name_parent”等。字段“name_parent”应该引用同一集合中的母公司(不同的文档)。由于并非所有收集的公司都应该有任何母公司,逻辑上这个字段应该是“必填:假”。我知道我可以轻松地将此字段的值类型保留为字符串。但是是否可以将 ObjectID 类型分配给该字段,该字段将引用包含母公司信息的文档的 _id 字段?

提前感谢您的帮助!

/* 更新 */ 在尝试了填充我的 MongoDB 的不同方法(从 csv 导入,通过我的应用程序中的“创建新公司”表单,并在专门编写的“populatedb.js”模块的帮助下)后,我终于得出结论,这样的模式(使用同一集合中的跨文档引用)不允许将“name_parent”字段留空。即使您明确定义它“必需:假”。因此,下面的说明不起作用。 comp_ParentName: {type: Schema.Types.ObjectId, ref: 'company', required: false}

请就如何处理这种关系的最佳做法提出其他建议?我想要再次在同一个集合“公司”中将母公司(一个法人实体和一份文件)引用到子公司(单独的法人实体和单独的文件)。

真的需要帮助!提前致谢!

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    所以你有类似这个的东西吗? :-

    /** Dependencies */
    // Mongoose
    const mongoose = require('mongoose')
    
    /** Data Schema */
    const CompaniesSchema = new mongoose.Schema({
      // Name Official
      name_official: { type: String, trim: true, required: true },
      // Name Short
      name_short: { type: String, trim: true, required: true },
      // Name Group
      name_group: { type: String, trim: true, required: true },
      // Name Parent
      name_parent: { type: mongoose.Schema.Types.ObjectId, ref: "Companies" }
    })
    
    /** Export */
    module.exports = mongoose.model('Companies', CompaniesSchema)
    

    那么它应该已经工作了

    【讨论】:

    • 感谢您的快速回答@lala。我目前正在通过将“公司”集合从 csv 文件导入 MongoDB 来试验它。我使用这种方法面临的问题是,一旦 csv 中的“name_parent”为空,MongoDB Compass 拒绝导入集合:( 当我明确要求它将字段保存为 ObjectID 类型时会发生这种情况。这就是我提出问题的原因:我猜MongoDB不支持同一个集合中的文档间引用...
    • 也许这可以帮助你ref
    • 感谢@lala。您实际上确认了这样的引用是可能的。所以这意味着我从 csv 文件导入数据时遇到问题。 Compass 不希望在 csv 文件中处理 ObjectID 数据类型的空字段......所以这是另一个话题;)
    • 是的。也许您在将数据导入csv 文件之前或以某种方式添加另一层服务或实用程序以检查是否存在ObjectId
    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2014-08-16
    • 2017-05-06
    相关资源
    最近更新 更多