【问题标题】:Can database references in mongodb reference two databases?mongodb中的数据库引用可以引用两个数据库吗?
【发布时间】:2020-10-14 17:52:53
【问题描述】:

我正在通过 mongooose 使用 MongoDB。 database references 可以同时引用两个数据库吗?

field_name: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'collectionA',// can I reference collectionA and collectionB too?
    required: true,
},

参见上面的代码。

字段field_name 可以是collectionA 或collectionB 中的objectId。如何在我的猫鼬模式中反映这一点?

【问题讨论】:

    标签: mongodb mongoose mongoose-schema


    【解决方案1】:

    我猜你正在通过 refPath 寻找 mongoose dynamic reference

    const someSchema = new Schema({
      field_name: {
        type: Schema.Types.ObjectId,
        required: true,
        refPath: 'onCollection'
      },
      onCollection: {
        type: String,
        required: true,
        enum: ['collectionA', 'collectionB']
      }
    });
    

    在这种情况下,ref 不是硬编码的型号名称,refPath 表示 Mongoose 将查看onCollection 属性以找到正确的模型。 例如,如果我们有这个文件:

     {
       field_name: some_id,
       onCollection: 'collectionA'
     }
    

    Collection.find().populate('field_name') 将填充来自collectionA 的字段。如果onCollection 字段的值是collectionB,它会从collectionB 填充它。

    这种情况仅适用于您想一次引用一个集合,但该集合是动态的。


    如果您需要同时引用两个集合,据我所知,没有猫鼬模式设计来支持引用数组。

    您可以忽略架构中的ref,并在要填充时传入 ref 的值:

    populate({
      path: 'field_name',
      model: 'collectionA'   
    })
    

    然后你可以有多个填充。同样适用于$lookup

    【讨论】:

    • 是的,我正在寻找的是通过 refPath 的猫鼬动态引用。如果您的所有查询都是聚合,是否需要 refPath? refpath 是否验证提供的 mongodb objectId 是否属于引用的集合?
    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多