猫鼬 - 可能的循环依赖?
Posted
技术标签:
【中文标题】猫鼬 - 可能的循环依赖?【英文标题】: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);
这是进行此类操作的正确方法吗?我有一种感觉,我可能会以某种方式生成循环依赖,而且无论如何它对我来说看起来不正确。关于如何创建来自另一个模型文件的架构的子文档的任何想法?
【问题讨论】:
【参考方案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 吗?以上是关于猫鼬 - 可能的循环依赖?的主要内容,如果未能解决你的问题,请参考以下文章