Mongoose 参考儿童
Posted
技术标签:
【中文标题】Mongoose 参考儿童【英文标题】:Mongoose Refs to children 【发布时间】:2017-01-13 03:07:45 【问题描述】:我正在努力寻找有关猫鼬儿童种群的示例或文档。
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);
这是有道理的,一个人可以有很多故事,因此“父”字段“故事”包含所有故事的列表。
我很难理解的是如何将故事推入人物模式。
例如,我有一个作业架构:
var mongoose = require ( 'mongoose' ),
Schema = mongoose.Schema;
var assignmentSchema = new Schema (
_id: String,
assignName: String,
modInsID: [ type: Schema.Types.Number, ref: 'ModuleInst' ],
studentAssigns: [type: Schema.Types.ObjectId, ref: 'StudentAssign' ]
);
module.exports = mongoose.model ( 'Assignment', assignmentSchema );
studentAssigns
存储了studentAssigns
的所有 id,然后可以与.pre
中间件一起使用进行级联删除。
现在我的 StudentAssign 架构:
var mongoose = require ( 'mongoose' ),
autoIncrement = require ( 'mongoose-auto-increment' ),
Schema = mongoose.Schema;
var connection = mongoose.createConnection("************");
autoIncrement.initialize(connection);
var studentAssignSchema = new Schema (
assID: [ type: Schema.Types.String, ref: 'Assignment' ],
studentID: [ type: Schema.Types.Number, ref: 'Student' ]
);
var StudentAssign = connection.model('StudentAssign', studentAssignSchema);
module.exports = mongoose.model ('StudentAssign', studentAssignSchema );
如您所见,它已经在引用“Assignment
”
这是我的 api 代码:
studentAssign 发布:
router.route('/student-assignment').post( function(req, res)
var studentAssign = new StudentAssign();
studentAssign.assID = req.body.assID;
studentAssign.studentID = req.body.studentID;
studentAssign.save(function(err, studentAssign)
if(err) console.log(err);
res.status(200).json(studentAssign);
);
)
这就是我感到困惑的部分,我将在哪里将“studentAssign
”推入“Assignment
”架构的“studentAssigns
”数组??
这是我当前的 api json 回调:
[
"_id": "As 1",
"assignName": "Software Implementation",
"__v": 0,
"studentAssigns": [],
"modInsID": [
"_id": 22,
"semester": "TRI 3",
"year": 2016,
"__v": 0,
"modID": [
111
]
]
]
文档并没有说清楚,因为它们只是显示:
aaron.stories.push(story1);
aaron.save(callback);
没有解释?
我尝试过:
var assignment = new Assignment();
assignment.studentAssigns.push(studentAssign);
什么都没有存储??
【问题讨论】:
你调用 assignment.save(); ? @Molda 是的,对不起,我没有复制那部分 【参考方案1】:router.get('/author', (req, res, next) =>
Person.
find().
exec( (err, person) =>
if (err) return handleError(err)
Story.find(author: person[0]._id).
exec( (err, story) =>
if (err) return handleError(err)
person[0].stories.push(story[0])
res.json( person: person )
)
)
)
【讨论】:
请在您的答案中添加一些解释性文字。为什么以及如何解决 OP 的问题?【参考方案2】:你的模型状态:
assID: [ type: Schema.Types.String, ref: 'Assignment' ],
studentID: [ type: Schema.Types.Number, ref: 'Student' ]
我认为根据您的代码,您不想在 assID 中存储多个作业,在 studentID 中存储多个学生。将您的模型修改为
assID: type: Schema.Types.String, ref: 'Assignment' ,
studentID: type: Schema.Types.Number, ref: 'Student'
您的保存代码可以保持不变。
如果您确实想存储多个分配,例如,您需要将它们推送到 assID 数组中;-)
【讨论】:
以上是关于Mongoose 参考儿童的主要内容,如果未能解决你的问题,请参考以下文章
Nodejs,Mongoose,Express:类型:Schema.ObjectId,参考:'Account' 不起作用