MongoDB聚合管道:如何在数组中比较字符串和日期

若昂·奥特罗(JoãoOtero)

我有一个situations包含以下结构的文档的集合

{
    "_id" : “32AzuAkJ8PXEgSkcuFII0YSeVUl1",
    "situations" : [
        {
            "datetime" : "2018-11-28T21:21:49.013Z"
        },
        {
            "datetime" : "2018-11-29T15:17:50.913Z"
        },
        {
            "datetime" : "2018-11-30T22:50:01.684Z"
        },
    ],
    "user" : [
        {
            "email" : “[email protected]”,
            "userType" : “new”
        }
    ]
}

我需要过滤掉其中至少有一个间情况的文件14 days,并7 days ago和至少一个情况之间7 days agonow它必须通过聚合管道进行,因为稍后我将需要执行其他操作。

首先,我尝试了以下管道:

{
    $match: {
        $and: [
            {
                $expr: {
                    $and: [
                        { "$situations.datetime": { $gt: new Date((new Date().getTime() - (7 * 24 * 60 * 60 * 1000))) } },
                        { "$situations.datetime": { $lte: new Date((new Date().getTime())) } }
                    ]
                }
            },
            {
                $expr: {
                    $and: [
                        { "$situations.datetime": { $gt: new Date((new Date().getTime() - (14 * 24 * 60 * 60 * 1000))) } },
                        { "$situations.datetime": { $lte: new Date((new Date().getTime() - (7 * 24 * 60 * 60 * 1000))) } }
                    ]
                }
            }
        ]
    }
}

但这没有用。我认为因为我datetime是一个字符串。然后我正在考虑以$dateFromString某种方式使用它,但是我不知道如何在situations数组中使用它

米克尔

如您所知,您无法将日期与数据库中存储的字符串进行比较-MongoDB绝不会返回此类查询的任何结果。在这种情况下,更简单的方法是使用.toJSON()函数将内存中的日期转换为字符串(在Mongo shell中进行了测试-您可以从任何编程语言构建相同的字符串)。

我在这里看到的另一个问题是您尝试应用两对条件,因此需要使用$ elemMatch否则,您可能有4个不同的日期,并且每个日期都将与您的条件之一匹配,而您试图situation 两个日期之间找到一个

您的查询可能如下所示:

db.col.aggregate([
    {
        $match: {
            $and: [
                { 
                    "situations": { 
                        $elemMatch: { 
                            datetime: { 
                                $gt: new Date((new Date().getTime() - (7 * 24 * 60 * 60 * 1000))).toJSON(),
                                $lte: new Date((new Date().getTime())).toJSON()
                            }
                        } 
                    } 
                },
                { 
                    "situations": { 
                        $elemMatch: { 
                            datetime: { 
                                $gt: new Date((new Date().getTime() - (14 * 24 * 60 * 60 * 1000))).toJSON(),
                                $lte: new Date((new Date().getTime() - (7 * 24 * 60 * 60 * 1000))).toJSON()
                            }
                        } 
                    } 
                }
            ]
        }
    }
])

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python中比较字符串和整数?

来自分类Dev

在 Swift 3 中比较字符串数组和字典

来自分类Dev

如何在Java中比较两个字符串日期?

来自分类常见问题

如何在GoLang中比较字符串?

来自分类Dev

如何在Java中比较字符串

来自分类Dev

如何在JSP中比较字符串

来自分类Dev

如何在C中比较字符串的某些部分?

来自分类Dev

如何在C中比较字符串

来自分类Dev

如何在php中比较字符串中的数字

来自分类Dev

如何在ksh中比较字符串

来自分类Dev

如何在python中比较这些字符串?

来自分类Dev

如何在 ReactNative 中比较字符串?

来自分类Dev

如何在基板模块中比较特征类型和字符串类型?

来自分类Dev

如何在PHP中比较字符串并忽略斜杠和反斜杠

来自分类Dev

如何在java中比较字符串arraylist值和arraystring值

来自分类Dev

如何在C#中比较整数和字符串?

来自分类Dev

如何在熊猫中比较单个字符串和多个字符串?

来自分类Dev

如何在数组mongodb下的子文档中使用日期字符串对数据进行分组

来自分类Dev

如何在聚合管道中将bool转换为字符串并按条件更改值-MongoDB

来自分类Dev

如何在C中比较由strdrup()制成的两个字符串数组?

来自分类Dev

如何在不使用$ unwind的情况下加快包括数组中日期字符串比较在内的聚合查询?

来自分类Dev

如何在Excel中比较字符串列表中的字符串

来自分类Dev

在Angular Controller中比较日期字符串的意外响应

来自分类Dev

如何比较字符串数组和字符数组

来自分类Dev

如何使用mongodb聚合返回字符串数组

来自分类Dev

在matlab中比较和移动不同长度的字符串/数组

来自分类Dev

如何在JavaScript中比较完全相同的字符串但具有不同的字符代码

来自分类Dev

包含C#中比较字符串数组的方法

来自分类Dev

如何在mongoDB中将数组中的日期字符串更新为日期格式?

Related 相关文章

  1. 1

    如何在python中比较字符串和整数?

  2. 2

    在 Swift 3 中比较字符串数组和字典

  3. 3

    如何在Java中比较两个字符串日期?

  4. 4

    如何在GoLang中比较字符串?

  5. 5

    如何在Java中比较字符串

  6. 6

    如何在JSP中比较字符串

  7. 7

    如何在C中比较字符串的某些部分?

  8. 8

    如何在C中比较字符串

  9. 9

    如何在php中比较字符串中的数字

  10. 10

    如何在ksh中比较字符串

  11. 11

    如何在python中比较这些字符串?

  12. 12

    如何在 ReactNative 中比较字符串?

  13. 13

    如何在基板模块中比较特征类型和字符串类型?

  14. 14

    如何在PHP中比较字符串并忽略斜杠和反斜杠

  15. 15

    如何在java中比较字符串arraylist值和arraystring值

  16. 16

    如何在C#中比较整数和字符串?

  17. 17

    如何在熊猫中比较单个字符串和多个字符串?

  18. 18

    如何在数组mongodb下的子文档中使用日期字符串对数据进行分组

  19. 19

    如何在聚合管道中将bool转换为字符串并按条件更改值-MongoDB

  20. 20

    如何在C中比较由strdrup()制成的两个字符串数组?

  21. 21

    如何在不使用$ unwind的情况下加快包括数组中日期字符串比较在内的聚合查询?

  22. 22

    如何在Excel中比较字符串列表中的字符串

  23. 23

    在Angular Controller中比较日期字符串的意外响应

  24. 24

    如何比较字符串数组和字符数组

  25. 25

    如何使用mongodb聚合返回字符串数组

  26. 26

    在matlab中比较和移动不同长度的字符串/数组

  27. 27

    如何在JavaScript中比较完全相同的字符串但具有不同的字符代码

  28. 28

    包含C#中比较字符串数组的方法

  29. 29

    如何在mongoDB中将数组中的日期字符串更新为日期格式?

热门标签

归档