如何使用多种类型的集合制作mongoose模式?

时间:2012-06-27 18:35:54

标签: javascript node.js mongodb mongoose

所以我有一个人和团队的架构。我想让一个人与一个或多个人或团体有关。到目前为止,我有这个:

var PersonSchema = new Schema({
    name    : String,
});
var PersonModel = mongoose.model('Person', PersonSchema);

var GroupSchema = new Schema({
    name    : String,
    members : [PersonSchema]
});
var GroupModel = mongoose.model('Group', GroupSchema);

如何向PersonSchema添加一组一个或多个组和/或其他人?

2 个答案:

答案 0 :(得分:0)

假设您的数据库中基于此同时拥有PersonsGroups个集合,您可以将ObjectId引用的数组添加到PersonSchema以捕获人与其他人或组的关系。如:

var PersonSchema = new Schema({
    name    : String,
    people: [{ type: Schema.ObjectId, ref: 'Person' }],
    groups: [{ type: Schema.ObjectId, ref: 'Group' }]
});

然后,只要您需要完整的详细信息,就可以使用mongoose的populate支持来跟踪这些引用。

答案 1 :(得分:0)

您可以定义如下:

var Relation = new mongoose.Schema({
RelationType:String, RefObjId: String //You can also take Schema.ObjectId 
});

var PersonObj = new mongoose.Schema({
name: String,
OtherDetails: String,
RefObjDetails:[Relation]
});

示例:

A(_id:100)人与B(_id:200)人和MyGroup(_id:333)分组有关。

JSON将如下所示:

{
 '_id':'100',
 'name': 'A',
 'OtherDetails': '',
 'RefObjDetails':[{'RelationType':'P', RefObjId:'200'},{'RelationType':'G', RefObjId:'333'}]
}