猫鼬 - 如何做很多错综复杂的关系?下面包含特定的快速挑战示例请求。感谢

时间:2016-09-29 00:00:40

标签: javascript node.js mongodb mongoose database

我知道如何使用节点,角度,表达等续集...但我只是开始使用mongoose学习平均堆栈的M部分。问题是我不知道mongodb在数据库中组织数据方面的能力。

在mongodb / mongoose中做过复杂关系的人是否可以向我展示以下内容?:

我希望看到一个简单,易于理解的SCHEMA,用于以下场景。

1)用户有很多朋友(意思是一组朋友,也是用户对象实例)。

2)用户可以参加许多活动(用户将拥有每个活动的出勤状态,即参加或拒绝)。用户还将拥有名称和用户名的属性。

3)事件可以有很多用户(每个用户都有一个出勤状态)。事件也会有一段时间的属性和地点。

几乎就是这样。再说一次,如果有人可以为此写出SCHEMA,我会非常感激,因为我正在努力理解

2 个答案:

答案 0 :(得分:0)

没有冒犯,但让别人写你的架构并不能帮助你理解堆栈的M部分。
我真的建议你买这本书MongoDB: The Definitive Guide

这使您可以很好地了解Mongo,还可以了解嵌入或引用文档。这实际上取决于您如何处理数据,以及数据的变化程度。

简单的猫鼬样品:

var UserSchema = new mongoose.Schema({
    first_name: { type: String },
    last_name: { type: String },
    friends: [UserSchema],
    events : [{
       event_id : { type: mongoose.Schema.Types.ObjectId },
       status : { type : Number}] 
})

var EventSchema = new mongoose.Schema({
    name : { type: String},
    users : [UserSchema]
})

这是一个真实的基本示例,其中一个包含单个引用(EventSchema.users / UserSchema.friend)和类似混合解决方案的UserSchema.events,其中包含事件的id和一些基本信息。

在猫鼬中,您可以使用populate来检索相关文档。

但是我想强调一下,去买书并阅读它,这样你就可以为你的场景做出正确的选择!

答案 1 :(得分:0)

有很多方法可以实现这一目标,但这取决于您的数据库设计以及您希望如何访问数据。通常,对于群组和事件,我非常喜欢拥有一个只对用户和事件有参考的集合,以及您可能需要的额外数据。至于在mongo中存储朋友,您可以存储为用户ID引用的数组或与组/事件相同的样式。看看猫鼬和图式属性中的人口(我也不确定向人们提出挑战问题,显然你需要做的是一个很好的解决方案)