mongodb - 查找匹配查询的第一个子文档

亚伦盖尔

我创建了一个非常类似于时间序列数据文档here的数据库模式

我最终得到了以下文件:

{
    "_id" : "unique_name_1",
    "data" : {
        "2017" : {
            "5" : {
                "21" : {
                    "61" : [ 
                        {
                            "timestamp" : 1498162890460.0,
                            "value" : true
                        }
                    ],
                    "84" : [ 
                        {
                            "timestamp" : 1498183202126.0,
                            "value" : false
                        }
                    ]
                },
                "22" : {
                    "24" : [ 
                        {
                            "timestamp" : 1498215602957.0,
                            "value" : true
                        }
                    ],
                    "61" : [ 
                        {
                            "timestamp" : 1498249322863.0,
                            "value" : false
                        }
                    ]
                }
            },
            "9" : {
                "16" : {
                    "36" : [ 
                        {
                            "timestamp" : 1508249031987.0,
                            "value" : true
                        }, 
                        {
                            "timestamp" : 1508249429052.0,
                            "value" : false
                        }
                    ]
                }
            }
        }
    }
}

'data' 下的第一个子文档代表年份第二个子文档代表月份第三个子文档代表日期第四个子文档表示事件发生当天15 分钟间隔

我想每天查询数据库并获取第一个 true(如果可能的话,可能是紧随其后的 false),同时忽略所有后续条目。

每天的第一个条目可能是也可能不是。数据不一定总是从真到假再到真。例如,我可能连续有几个真值,在这种情况下,我想忽略所有后续的真值。

这种结构对于查询特定时间非常有用,如果您知道它们,但我无法查询特定值。我应该只查询整个文档并在前端解析它吗?如果我想对数百个文档运行相同的查询,这将变得更加困难。

谢谢您的帮助。

米克尔

要在一天的上下文中分析您的数据,您必须使用一长串$objectToArray结合$unwind那是因为找出代表日、月、年的唯一方法是分析嵌套级别。然而,一旦你这样做了,剩下的就很简单了。尝试:

db.col.aggregate([
    {
        $project: {
            data: { $objectToArray: "$data" }
        }    
    },
    {
        $unwind: "$data"
    },
    {
        $project: {
            year: "$data.k",
            data: { $objectToArray: "$data.v" }
        }    
    },
    {
        $unwind: "$data"
    },
    {
        $project: {
            year: 1,
            month: "$data.k",
            data: { $objectToArray: "$data.v" }
        }    
    },
    {
        $unwind: "$data"
    },
    {
        $project: {
            year: 1,
            month: 1,
            day: "$data.k",
            data: { $objectToArray: "$data.v" }
        }    
    },
    {
        $unwind: "$data"
    },
    {
        $project: {
            year: 1,
            month: 1,
            day: 1,
            interval: "$data.k",
            data: "$data.v"
        }    
    },
    {
        $unwind: "$data"
    },
    {
        $match: { "data.value": true }
    },
    {
        $sort: {
            "data.timestamp": 1
        }
    },
    {
        $group: {
            _id: {
                year: "$year",
                month: "$month",
                day: "$day"
            },
            firstPositive: {
                $first: "$data"
            }
        }
    }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MongoDB查找下一个文档或转到第一个

MongoDB在聚合查询中获取第一个和最后一个文档

Group by使用pymongo仅返回mongodb中的第一个匹配文档,如何检索所有匹配的文档?

DJS MongoDB 仅更新第一个文档

MongoDB查询以查找数组的第一个元素的属性

仅在mongodb集合中获取具有条件的第一个匹配文档

如何在mongodb中动态$ set一个子文档字段?

查找一个mongodb文档,该文档的字段值与输入数组的某项匹配

Mongodb:如何从数据库中获取第一个文档,然后将其删除

使用findOne()MongoDB从集合中检索第一个文档

从MongoDB中的所有文档中获取数组字段的第一个元素的总和

具有$ or运算符的Mongodb updateOne始终更新集合中的第一个文档,即使没有匹配项也是如此

子文档数组上的 MongoDB 查询和投影也返回另一个文档的数组

有没有使用“更新”功能给定查询和排序选项的方式来更新MongoDB集合中的第一个文档的方法?

通过传递的MongoDB查询将数组中的第一个对象作为目标

mgo,mongodb:从嵌入式结构中查找与一个字段匹配的文档

使用另一个查询的结果在MongoDB中查找文档

如何从MongoDB中的子文档数组中仅返回一个匹配的子文档(而不是数组)?

在MongoDB 3.2中创建第一个用户。

MongoDB对两个集合进行查询,以在第一个集合中添加/减去一个字段,并与第二个集合中的匹配字段相加

在mongodb中,获取第一个文档和最后一个文档的最有效方法是什么

在mongodb中指定大小的句子中查找第一个和第二个单词

在ChangeStream中收到第一个文档之前,使用MongoDB Java驱动程序获取简历令牌吗?

MongoDB:查询文档,其中一个字段等于其子文档字段之一?

MongoDB $查找一个文档的对象数组

MongoDB查询-子文档

总计匹配的Mongodb查找返回一个空数组

遍历嵌套集合以找到与条件匹配的第一个子-子-子元素

mongoDB 查找、更新和拉入一个查询