我的 Express 应用程序中有以下猫鼬模型:
//dog.js
var mongoose = require("mongoose");
var dogSchema = (exports.dogSchema = mongoose.Schema({
name: { type: String, required: true },
}));
然后我导入dog.js
to my 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);
这是进行此类操作的正确方法吗?我有一种感觉,我可能会以某种方式生成循环依赖,无论如何,它对我来说看起来不正确。关于如何创建架构来自另一个模型文件的子文档有什么想法吗?
您可以在两个方向上同时创建参考,而不会产生循环问题。使用以下命令创建从一个文档到另一文档的引用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
他们俩
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)