在Node.js + Mongoose中,我想在收藏文章中找到一些用户的评论。
设计1:
articles:
{
...
users: ["a@a.com","b@b.com","c@c.com"]
comments: [
{email:"a@a.com", comment:"..."},
{email:"b@b.com", comment:"..."},
{email:"c@c.com", comment:"..."},
...
]
}
设计2:
articles:
{
...
comments: [
{email:"a@a.com", comment:"..."},
{email:"b@b.com", comment:"..."},
{email:"c@c.com", comment:"..."},
...
]
}
我正在使用设计1,首先找到{users:req.query.user},然后从结果中检索用户的评论。但我觉得这不聪明。有没有像解决方案2的方法,我不知道如何编写数据库查询。
答案 0 :(得分:0)
您对第二个结构的查询实际上就是这么简单。在mongo shell上它将是:
db.collection_name.find({'comments.email': 'a@a.com'})
查询引擎非常智能,可以内省该数组并返回符合要求的文档。
从那时起,您只需要遍历应用程序代码中的注释,并使用匹配的电子邮件提取这些注释。如果这是您构建数据的方式,则无需在查询时进行此限制。根据需要遍历所有评论。
如果将结果集限制为仅针对特定用户的注释很重要,您可以重新考虑将对象结构化为更具关系性的方式(可能是与文章集合相关的每个注释的文档?尝试根据查找潜力的重要值来考虑您的模式,并在可能的情况下将它们编入索引。