Mongo:引用同一集合中另一个文档的_id字段
Posted
技术标签:
【中文标题】Mongo:引用同一集合中另一个文档的_id字段【英文标题】:Mongo: reference to _id Field of another document within the same collection 【发布时间】: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
请就如何处理这种关系的最佳做法提出其他建议?我想要再次在同一个集合“公司”中将母公司(一个法人实体和一份文件)引用到子公司(单独的法人实体和单独的文件)。
真的需要帮助!提前致谢!
【问题讨论】:
【参考方案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
。以上是关于Mongo:引用同一集合中另一个文档的_id字段的主要内容,如果未能解决你的问题,请参考以下文章