0

我试图了解如何在 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有没有办法计算“属于” a的文档总数,在xxx-12345哪里?type1

在上述情况下,我希望看到类似{ '1':3, '2':1 }.

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

4

2 回答 2

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 } }
                     });
于 2013-10-05T09:37:15.663 回答
0

您可以使用2.2 版本中引入的聚合管道:

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”是类型,“total”是类型出现在用户“xxx-12345”中的计数。

但是,如果您只想获取属于类型为“1”的“xxx-12345”的文档总数,您可以这样做:

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

这将输出以下内容:

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

其中“计数”是您要查找的内容。

于 2013-10-05T09:36:56.833 回答