有没有办法在mongoose中

时间:2015-11-03 21:52:47

标签: node.js mongodb mongoose

我有一个GroupUser架构,而adding group则将users映射到它。 user可以属于多个groups

我的PartySchema下面有usergroups

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

我正在table structure中显示地图,就像在我的Party页面的复选框中一样,并为“Party”选择群组及其用户

-- Groups
---- Users

您可以在checkbox style[Parent[Group]-Children[User]]中选择一个论坛及其用户。在PartySchema中,我将选定的groups和选定的users分别更新为reference不作为文档。更新PartySchema }}

    user: [{ type: Schema.ObjectId, ref: 'Person' }],
    groups: [{ type: Schema.ObjectId, ref: 'Group' }]

我刚收到两个group ID和users个ID,我无法说明"Group1" shane已被选中,而不是"Group2",因为从早期的关系“Shane”属于两个团体,但在添加派对时,我只选择Group2中的“shane”,而不是Group1。

在编辑聚会页面时,我再次获得所有组和用户,在此我无法说在组2中选择“Shane”为“Group1”也有“Shane”和“Group2”也有shane,我们将其保存为参考而不是文档。

-- Group1
---- Shane [Not selected]
-- Group1
---- Shane [selected]

1 个答案:

答案 0 :(得分:1)

派对架构

 var Party = new Schema({
        name    : String,
        user_group: [{user:{ type: Schema.ObjectId, ref: 'Person' },group:{ type: Schema.ObjectId, ref: 'Group' }}]
        groups: [{ type: Schema.ObjectId, ref: 'Group' }]
    });

派对对象

var party = new Party({
    name: "Haloween Party",
    user_group: [{
        user: shane._id,
        group: group1._id
    }, {
        user: userX._id,
        group: group1._id
    },
    {
        user: userY._id,
        group: group2._id
    }],
    groups:[group1._id,group2._id]
})

保存参与方并查询所有现有参与方

party.save(function(error) {
    if (!error) {
        Party.find({})
            .populate('user_group.user')
            .populate('user_group.group')
            .populate('groups')
            .exec(function(error, parties) {
                console.log(JSON.stringify(parties, null, "\t"))//or just parties
            })
    }
});

数据库中的派对文档 (类似这样)

{
    "_id" : ObjectId("54cd6669d3e0fb1b302e54e6"),
    "name" : "Haloween Party",
    "user_group" : [
        {
            "user" :  ObjectId("54cd6669d3e0fb1b302e5411"),
            "group" : ObjectId("54cd6669d3e0fb1b302e54e5"),
            "_id" : ObjectId("54cd6669d3e0fb1b302e54e8")
        },
        {
            "user" :ObjectId("54cd6669d3e0fb1b302e5412"),
            "group" : ObjectId("54cd6669d3e0fb1b302e54e4"),
            "_id" : ObjectId("54cd6669d3e0fb1b302e54e7")
        }
    ],
    "groups":[ObjectId("54cd6669d3e0fb1b302e54e5"),ObjectId("54cd6669d3e0fb1b302e54e4")]
    "__v" : 0
}

Git repo获取示例参考https://github.com/AlexZeitler/mongoose-schema-reference-sample