首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongodb:如何根据id从不同的集合聚合数据

Mongodb:如何根据id从不同的集合聚合数据
EN

Stack Overflow用户
提问于 2017-12-08 17:24:57
回答 1查看 2.1K关注 0票数 0

我有一份文件中的数据

收藏品A

代码语言:javascript
运行
复制
{  
 "_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

代码语言:javascript
运行
复制
{  
 "_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日之间的数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-03 08:25:10

非常简单,使用mongodb $lookup查询,它相当于左外部联接。左边的所有文档都将被扫描,以在字段中找到一个值,而右侧的文档将被认为是相对于值而言匹配的。对于您的情况,下面是父集合

父母A

儿童收藏B

现在我们要做的就是从集合A中查询

使用一个非常简单的聚合$lookup查询,您将看到以下结果

代码语言:javascript
运行
复制
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})

记住几件事

  1. 查找的本地字段不关心是否对其进行索引,在行数最少的表上运行它
  2. 当索引或直接在_id上时,外域工作得最好。
  3. 有一个选项可以指定管道并在匹配时执行一些自定义筛选工作,我不推荐它,因为管道速度太慢了。
  4. 如果要聚合大量数据,请不要忘记使用"allowDiskUse“
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47719338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档