我正在尝试了解如何在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}}等结果。
此外,以上是创建关系的可接受方式吗?
答案 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"是你正在寻找的。 p>