我有一份文件中的数据
收藏品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
},.......
}数据被存储在每小时,因为它存储在一个文档中,它可能在某个时候达到16 to的极限,这就是为什么我想把数据分散到不同的年份,这意味着在一个集合中,所有的id将每年保存数据。但是当我们想要显示合并的数据时,我们如何使用聚合函数呢?
例如,collectionA拥有12月7日至12月17日的数据,collectionB拥有12月6日至12月16日的数据,如何显示12月1日至1月17日之间的数据?
发布于 2018-03-03 08:25:10
非常简单,使用mongodb $lookup查询,它相当于左外部联接。左边的所有文档都将被扫描,以在字段中找到一个值,而右侧的文档将被认为是相对于值而言匹配的。对于您的情况,下面是父集合
父母A

儿童收藏B

现在我们要做的就是从集合A中查询
使用一个非常简单的聚合$lookup查询,您将看到以下结果

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})记住几件事
https://stackoverflow.com/questions/47719338
复制相似问题