我是MongoDB的新手,我正在尝试做一种“个人资料/评论”模块。我将这两个实体保存到两个不同的集合中,因为我读到了有很多嵌套元素的一些限制(在这种情况下,评论会增长很多)。
我的架构是:
评论:
{
"_id" : ObjectId("56073ea299f4ebd05df813a8"),
"rate" : "0",
"owner" : "xub32YLjc4xJa38aM",
"to" : "8zqCPbkwYMfajyFQx",
"createdAt" : ISODate("2015-09-27T00:56:02.328Z")
}
其中:
资料:
{
"_id" : "8zqCPbkwYMfajyFQx",
"CI" : "19",
"firstName" : "Alan",
"lastName" : "Brito Delgado",
"gender" : "m",
"bio" : "lorem ipsum haha a bio right here pls",
"birthdate" : ISODate("2015-09-26T01:54:46.687Z"),
"specialty" : "Medico generalshhh",
"worksIn" : "Integramedica",
"academicInformation" : "Medicia UC 2010",
"avatar_url" : "img/doctor-1.png",
"certified" : false
}
其中: - CI,专业,WorksIn,AcademicInformation和Certified 是我用来过滤个人资料的字段
我的问题是我想制作一个“排名视图”,人们可以添加过滤器来根据他们的过滤器查看排名,而且,我不知道如何加入有关个人资料和评论计数的信息。 (排名基于好评的数量)
我有一种方法可以知道按个人资料分组的“好”评论的数量,但是,我不知道如何附加“个人资料”信息:
db.reviews.group({
key: {to:1},
cond: {rate:"1"},
reduce: function(curr, result){
result.count++;
},
initial: { count: 0 }
})
我现在的型号可以吗?或者我需要在评论中嵌套个人资料或附加用户进行审核? (使用第二种方法,我想我的用户信息不会更新)
PS:我查看个人资料,而不是用户,因此,用户与个人资料不同
答案 0 :(得分:0)
普遍的共识是,如果您不需要反应性地发布,请在客户端进行加入。然而,流星的意义在于建立反应性应用。
你看过关系发表了吗? https://github.com/svasva/meteor-publish-with-relations
你想要这样的东西:
Meteor.publish('rating', function(id) {
Meteor.publishWithRelations({
handle: this,
collection: ratings,
filter: id,
mappings: [{
key: '_id',
collection: Meteor.profiles
}, {
reverse: true,
key: '_id',
collection: Comments,
filter: { approved: true },
options: {
limit: 10,
sort: { createdAt: -1 }
},
mappings: [{
key: '_id',
collection: Meteor.profiles
}]
}]
});
});
另请参见发布回复https://atmosphere.meteor.com/package/reactive-publish
最后,Meteor的大量资源和值得购买的电子书https://www.discovermeteor.com/
ps - 我假设你想要一个Meteor答案给出标签。如果你想要纯粹的mongodb,那么以上可能不会帮助你