0

在 Node.js + Mongoose 中,我想在收藏文章中找到一些用户的评论。

设计一:

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:"..."},
        ...
    ]
}

设计二:

articles:
{
    ...
    comments: [
        {email:"a@a.com", comment:"..."},
        {email:"b@b.com", comment:"..."},
        {email:"c@c.com", comment:"..."},
        ...
    ]
}

我正在使用设计 1,首先找到 {users:req.query.user} ,然后从结果中检索用户的评论。但我觉得它不聪明。有没有像解决方案2这样的方法,我不知道如何编写数据库查询。

4

1 回答 1

0

您对第二个结构的查询实际上同样简单。在 mongo shell 上,它将是:

db.collection_name.find({'comments.email': 'a@a.com'})

查询引擎足够聪明,可以自省到该数组并返回符合要求的文档。

从那时起,您只需要遍历应用程序代码中的注释并提取具有匹配电子邮件的注释。如果这是您构建数据的方式,则无需在查询时进行此限制。根据需要循环浏览所有评论。

如果将结果集限制为仅针对特定用户的评论很重要,您可能需要重新考虑将对象构造成更具相关性的方式(也许每个评论的文档都与文章集合相关?)尝试根据查找潜力方面的重要值来考虑您的模式,并在可能的情况下对它们进行索引。

于 2013-01-04T01:42:50.437 回答