我正在尝试使用MongoDB运行查询,但我似乎无法弄明白。我有两个刮刀同时从不同的API收集数据,并将它们插入不同文档中的相同集合中。如果我的藏品中有以下文件:
{
'scraper': 1,
'time': 24,
'number: 500
}
{
'scraper': 2,
'time': 24,
'number: 600
}
{
'scraper': 1,
'time': 12,
'number: 700
}
{
'scraper': 2,
'time': 12,
'number: 800
}
在查询之后,我想基于时间比较数据(以及组),但是将刮刀ID和两个文档的数量保持在一起。
{
'time': 24,
'data':[
{'scraper':1, 'number:500},
{'scraper':2, 'number':600}]
}
{
'time': 12,
'data':[
{'scraper':1, 'number:700},
{'scraper':2, 'number':800}]
}
我会把我的尝试联系起来,但我太过分了。我想我需要以某种方式使用.aggregate和分组,但我似乎无法弄清楚如何保存两个文档中的数据并重新排列它。
感谢您的帮助!
答案 0 :(得分:2)
您使用聚合组进入正确的轨道,$ addToSet将保留原始唯一值,或者如果您想保留重复项,则可以使用$ push:
addToSet:
db.groups.aggregate([
{$group: {_id: '$time', data: {$addToSet: {scraper: '$scraper', number: '$number' }}}}
])
推:
db.groups.aggregate([
{$group: {_id: '$time', data: {$push: {scraper: '$scraper', number: '$number' }}}}
])
(两者都会为您提供的数据集提供相同的结果)
如果保留字段名称,' time'而不是_id对您来说很重要,您可以添加一个额外的项目阶段。
db.groups.aggregate([
{$group: {_id: '$time', data: {$push: {scraper: '$scraper', number: '$number' }}}},
{$project: {_id: 0, time: '$_id', data: 1}}
])