我试图了解如何在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'}
有没有办法计算"属于"xxx-12345
userId
的文档总数,其中type
1
?
在上述情况下,我希望看到像 { '1':3, '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 } }
});
可以使用版本 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"是类型,"总计"是用户"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 }
其中"计数"是您要查找的内容。