MongoDB在数组中找到匹配条件的第一个元素

时间:2019-03-01 16:55:42

标签: mongodb aggregation-framework

我已经收集了具有以下结构(大大简化)的项目:

{
    _id: 1,
    transfers: [
        {
            date: 2017,
            person: 'C'
        },
        {
            date: 2012,
            person: 'B'
        },
        {
            date: 2010,
            person: 'A'
        }
    ]
}

我想按日期查询它,以找出哪个人在给定的时间点“拥有”了该物品。我已经在javascript应用程序中实现了这一点,只需简单地提取整个transfers数组并对其进行迭代直到

searchDate > transfers[i].date

例如,搜索2014年的日期将返回人员B

我觉得仅在Mongo查询中就可以实现这种逻辑,并减少必须发送给应用程序的数据量(传输数组可能会很大)。我试图理解这里发布的其他解决方案,但是我不确定是否找到适合自己问题的解决方案,并且我缺乏编写mongo查询以适应任何类似需求的经验。

任何帮助将不胜感激。

干杯

P

1 个答案:

答案 0 :(得分:0)

我使用过MongoDB聚合框架

阶段1-通过transfers过滤date

第二阶段-展开transfers数组

stage3-仅投影person字段

db.collection.aggregate([
    {
        '$project': {
            'transfers': {
                '$filter': {
                    'input': '$transfers', 
                    'as': 'transfer', 
                    'cond': {
                        '$eq': [
                            '$$transfer.date', 2017
                        ]
                    }
                }
            }
        }
    }, {
        '$unwind': '$transfers'
    }, {
        '$project': {
            '_id': 0, 
            'person': '$transfers.person'
        }
    }
])