【问题标题】:Mongoose: Using objectModel.schema doesn't work for parameter in other schema?Mongoose:使用 objectModel.schema 不适用于其他模式中的参数?
【发布时间】:2019-10-04 05:29:25
【问题描述】:

对于 mongoose,如果你定义了两个 Schema:

const mongoose = require("mongoose");

const objectAModel = require("/pathTo/objectAModel");

const Schema = mongoose.Schema;

const objectBSchema = new Schema({
  _id: Schema.Types.ObjectId,
  objectAArray: [objectAModel.Schema]
});

module.exports = mongoose.model("objectB", objectBSchema);
const mongoose = require("mongoose");

const objectBModel = require("/pathTo/objectBModel");

const Schema = mongoose.Schema;

const objectASchema = new Schema({
  _id: Schema.Types.ObjectId,
  objectBArray: [objectBModel.Schema]
});

module.exports = mongoose.model("objectB", objectBSchema);

第一个代码可以正常工作,但是第二个会抛出错误:

TypeError: Invalid value for schema Array path `ObjectBArray`

所以,我无法确定问题所在,因为两个代码 sn-ps 是相同的,如果我在第二个 sn-p 中从 objectBArray 中删除 .schema,一切正常。有什么问题?

【问题讨论】:

    标签: node.js mongodb mongoose model schema


    【解决方案1】:

    问题是你有循环依赖。解决它的方法是创建一个模型到另一个模型的引用,如下所示:

    // the schema in objectB.js
    const objectBSchema = new Schema({
      _id: Schema.Types.ObjectId,
      objectAArray: [{
         type: Schema.Types.ObjectId,
         ref: "objectA"
      }]
    });
    
    module.exports = mongoose.model("objectB", objectBSchema);
    
    // the schema in objectA.js
    const objectASchema = new Schema({
      _id: Schema.Types.ObjectId,
      objectBArray: [{
         type: Schema.Types.ObjectId,
         ref: "objectB"
      }]
    });
    
    module.exports = mongoose.model("objectA", objectASchema);
    

    请注意,现在您根本不需要将模型导入到其他模型文件中。此外,ref 名称必须与您在 mongoose.model 中为模型命名的名称完全匹配。最后,您将在此数组中存储相关模型的_id,并且您可以在运行查找查询时使用.populate 获取相关文档

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 2015-07-13
      • 2018-02-25
      • 2019-06-20
      • 2022-08-17
      • 1970-01-01
      • 2014-05-09
      • 2018-08-16
      • 1970-01-01
      相关资源
      最近更新 更多