如何通过ID从相关文档中检索数据?

时间:2013-10-05 05:47:10

标签: mongodb database-relations database

我正在尝试了解如何在mongoDB中建立基本关系。我在文档中已经阅读了一些相关内容,但它有点简洁。

这应该非常简单:我正在尝试记录展示列表和负责展示的用户。以下是日志文档的一些示例:

{type: '1', userId:'xxx-12345'}
{type: '1', userId:'xxx-12345'}
{type: '1', userId:'xxx-12345'}
{type: '2', userId:'zzz-84638'}
{type: '2', userId:'xxx-12345'}

以下是用户文档的示例:

{userId: 'xxx-12345', location: 'US'}

有没有办法计算userId xxx-12345 type的文件总数,其中1{ '1':3, '2':1 }

在上述情况下,我希望看到{{1}}等结果。

此外,以上是创建关系的可接受方式吗?

2 个答案:

答案 0 :(得分:1)

对于您的第一个问题Is there a way to count the total number of documents which "belong" to a userId of xxx-12345, where type is 1?,以下是解决方案:

db.impressions.aggregate({
                           $match: {
                                userId: 'xxx-12345',
                                type: 1
                           }
                         },
                         {
                              $group: { _id: null, count: { $sum: 1 } }
                         });

要以您指定的格式(In the above case, I'd want to see a result like { '1':3, '2':1 }.)获取解决方案,请使用以下代码:

db.impressions.aggregate({
                       $match: {
                            userId: 'xxx-12345',
                       }
                     },
                     {
                          $group: { _id: '$type', totalImpressions: { $sum: 1 } }
                     });

答案 1 :(得分:0)

您可以使用2.2版中引入的Aggregation Pipeline

db.a.aggregate([
  { $match: { userId: 'xxx-12345' } },
  { $group: { _id: "$type", total: { $sum: 1 } } }
])

这将输出:

{
        "result" : [
                {
                        "_id" : "2",
                        "total" : 1
                },
                {
                        "_id" : "1",
                        "total" : 3
                }
        ],
        "ok" : 1
}

其中" _id"是类型,"总计" 是该类型出现在用户" xxx-12345" 中的计数。

但是,如果您只想获得属于" xxx-12345"的文件总数。类型为" 1" 你可以这样做:

db.a.aggregate([
  { $match: { userId: 'xxx-12345', type: "1" } },
  { $group: { _id: null, count: { $sum: 1} } }
])

将输出以下内容:

{ "result" : [ { "_id" : null, "count" : 3 } ], "ok" : 1 }

其中" count"是你正在寻找的。