我有一份文件,其中数据类似于 集合A
{
"_id" : 69.0,
"values" : [
{
"date_data" : "2016-12-16 10:00:00",
"valueA" : 8,
"valuB" : 9
},
{
"date_data" : "2016-12-16 11:00:00",
"valueA" : 8,
"valuB" : 9
},.......
}
收集B
{
"_id" : 69.0,
"values" : [
{
"date_data" : "2017-12-16 10:00:00",
"valueA" : 8,
"valuB" : 9
},
{
"date_data" : "2017-12-16 11:00:00",
"valueA" : 8,
"valuB" : 9
},.......
}
数据存储在每个小时,因为它存储在一个文档中,它可能在某个时刻达到其限制16Mb,这就是为什么我想在多年来传播数据,意味着在一个集合中所有id都将保持每年的数据。但是当我们想要显示组合数据时,我们如何使用聚合函数?
例如,collectionA具有从2016年12月7日到17日的数据,而collectionB具有从2016年12月15日到2016年6月6日的数据。我如何才能在不同的收集中显示2016年1月12日至1月1日之间的数据?
答案 0 :(得分:1)
非常简单,使用mongodb $ lookup查询,它相当于左外连接。将扫描左侧的所有文档以获取字段内的值,并且右侧的文档将被视为外部文档将与值相匹配。对于您的情况,这是父集合
家长A
儿童收藏B
现在我们所要做的就是从集合A
进行查询db.getCollection('uniques').aggregate([
{
"$lookup": {
"from": "values",//Get data from values table
"localField": "_id", //The field _id of the current table uniques
"foreignField": "parent_id", //The foreign column containing a matching value
"as": "related" //An array containing all items under 69
}
},
{
"$unwind": "$related" //Unwind that array
},
{
"$project": {
"value_id": "$related._id",//project only what you need
"date": "$related.date_data",
"a": "$related.valueA",
"b": "$related.valueB"
}
}
], {"allowDiskUse": true})
记住一些事情