我已经收集了具有以下结构(大大简化)的项目:
{
_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
答案 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'
}
}
])