【问题标题】:mongoose - possible circular dependency?猫鼬 - 可能的循环依赖?
【发布时间】:2014-01-28 04:09:22
【问题描述】:

我的快递应用中有以下猫鼬模型:

//dog.js
var mongoose = require("mongoose");

var dogSchema = (exports.dogSchema = mongoose.Schema({
  name: { type: String, required: true },
}));

然后我将dog.js 导入到我的user.js

//user.js
var mongoose = require("mongoose");
var dog = require("./dog");

var userSchema = mongoose.Schema({
  user: { type: String, required: true },
  pass: { type: String, required: true },
  dogs: [dog.dogSchema],
});

现在,从我的路线中,我正在创建一个这样的新用户:

var user = require("../models/user");
var dog = require("../models/dog");

dog = new dog.Dog(dogData);
user = new user.User(data); //this will of course contain also dogData
user.save(next);

这是进行此类操作的正确方法吗?我有一种感觉,我可能会以某种方式生成循环依赖,而且无论如何它对我来说看起来不正确。关于如何创建来自另一个模型文件的架构的子文档的任何想法?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以在两个方向上同时创建参考,而不会产生循环问题。使用ref 创建从一个文档到另一个文档的引用。来自文档:

    http://mongoosejs.com/docs/populate.html

    var mongoose = require('mongoose')
      , Schema = mongoose.Schema
    
    var personSchema = Schema({
      _id     : Number,
      name    : String,
      age     : Number,
      stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
    });
    
    var storySchema = Schema({
      _creator : { type: Number, ref: 'Person' },
      title    : String,
      fans     : [{ type: Number, ref: 'Person' }]
    });
    
    var Story  = mongoose.model('Story', storySchema);
    var Person = mongoose.model('Person', personSchema);
    

    然后您可以选择使用populate加载子文档

    Story.find({ --your criteria-- })
        .populate('_creator')
        .exec(function (err, story) {../});
    

    然后,您可以将这 2 个架构存储在单独的 .js 文件中,require 将它们都存储起来

    【讨论】:

    • 这很有帮助。如果您希望某人与其他人有联系(比如亲戚,因为没有更好的例子)怎么办。你可以对相同模型的对象数组的引用做同样的事情吗?那么你能把relatives : [{ type: Schema.Types.ObjectId, ref: 'Person' }] 添加到personSchema 吗?
    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2016-11-06
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多