我有以下架构:用户,目标和成就
在用户架构中,我需要用户喜欢的项目列表。项目是成就或目标。
所以我需要这样的东西:
User: {
email: { type: String },
username: { type: String },
password: { type: String },
firstName: { type: String }
lastName: { type: String },
likes: [ { type: ObjectId, ref: 'Goal/Achievement' } ],
}
如何在单个对象ID列表中引用多个模式?
编辑:尝试更具体......
这是一个用户示例:
{
email: "myemail@gmail.com"
username: "juanfuentes"
password: "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8"
firstName: "Juan"
lastName: "Fuentes"
likes: [
ObjectId("579bc55d57fd27f802569061"),
ObjectId("5797bc7a86fc997203b52acc"),
ObjectId("579bc4fa3fe32af302e098a1"),
ObjectId("57968fd0c54d7bb9058fff77")
]
}
ObjectId("579bc55d57fd27f802569061")
属于目标
ObjectId("5797bc7a86fc997203b52acc")
属于成就
ObjectId("579bc4fa3fe32af302e098a1")
也属于目标
ObjectId("57968fd0c54d7bb9058fff77")
属于成就
所以,如果喜欢是一个目标列表,我会这样声明:
likes: [ { type: ObjectId, ref: 'Goal } ]
如果喜欢是成就列表,我会这样声明:
likes: [ { type: ObjectId, ref: 'Achievement' } ]
但是,我希望喜欢成为目标和成就的列表。而且我不知道如何宣布这样的事情。
答案 0 :(得分:0)
使用DBRef它是一个对象,由文档ID,引用文档所在的集合名称以及可选的数据库名称组成。
答案 1 :(得分:0)
在我看来,您正在寻找用户与目标/成就之间的多对多关系。
在这种情况下,一个好的方法是创建2个额外的模式,以便将用户链接到目标和成就表;像这样:
额外架构1:
UserLikedGoals: {
userId: { type: ObjectId, ref: 'User' },
goalId: { type: ObjectId, ref: 'Goal' },
}
额外架构2:
UserLikedAchievements: {
userId: { type: ObjectId, ref: 'User' },
achievementId: { type: ObjectId, ref: 'Achievement' },
}
您可以通过在新架构中查找包含此用户ID的行来访问特定用户的所需目标/成就。
答案 2 :(得分:0)
在这里找到答案:https://stackoverflow.com/a/35470271/2454036
我想我还需要更多的搜索......