Mongodb 基于本地时间日期查询ISODate

Mongodb 基于本地时间日期查询ISODate,mongodb,Mongodb,我正试图找出一些似乎深不可测的事情。如果下面列出的交易日期(顺便说一句,它是一个字符串,我似乎无法将其转换为爱情或金钱的ISODate)是UTC时间,那么我如何查询月份范围(如果是日期)并计算销售额 我不想要UTC月份,我想要本地时区月份。所以我想我的问题是双重的 有人知道如何将事务日期转换为ISODate而不是字符串吗$DateFromString不起作用 如何执行输入为预期本地时区的查询,其中事务日期存储为UTC日期 谢谢,马特 { "_id" : ObjectId("5ab

我正试图找出一些似乎深不可测的事情。如果下面列出的交易日期(顺便说一句,它是一个字符串,我似乎无法将其转换为爱情或金钱的ISODate)是UTC时间,那么我如何查询月份范围(如果是日期)并计算销售额

我不想要UTC月份,我想要本地时区月份。所以我想我的问题是双重的

  • 有人知道如何将事务日期转换为ISODate而不是字符串吗$DateFromString不起作用
  • 如何执行输入为预期本地时区的查询,其中事务日期存储为UTC日期
  • 谢谢,马特

        {
        "_id" : ObjectId("5ab485c669150d532c41769f"),
        "object_origin" : "vend",
        "company" : "5a9a73bb-0c5a-41db-8d06-76ac2d1e04b0",
        "connection" : "2f758916-2eb1-4d95-a3bb-7d6258bc2143",
        "object_creation_date" : ISODate("2018-03-16T10:40:20.875+13:00"),
        "transaction_date" : "2018-03-07T11:36:48",
        "transaction_gross_value" : 165,
        "transaction_net_value" : 137.5,
        "transaction_tax_value" : 27.5,
        "transaction_cost_value" : 80,
        "object_class" : "goods-service-transaction",
        "object_origin_category" : "point-of-sale",
        "object_type" : "receipt",
        "object_origin_type" : "offline",
        "transaction_reference" : "119",
        "transaction_status" : "CLOSED",
        "transaction_currency" : "GBP",
        "party_identifier" : "WALKIN",
        "staff_identifier" : "02dcd191-ae2b-11e6-f485-79681a952bd4",
        "staff_name" : "uat2@9spokes.com",
        "line_items" : [
            {
                "item_name" : "Dress Shirt / Polyester / Large",
                "item_system_id" : "5051599d-40c2-a66a-11e8-21fbce105df0",
                "item_identifier" : "10024",
                "item_category" : "sales-revenue",
                "item_quantity" : 1,
                "item_net_unit_sale_value" : 62.5,
                "item_net_unit_discount_value" : 0,
                "item_net_unit_member_value" : 0,
                "item_net_unit_cost_value" : 60,
                "item_unit_tax_value" : 12.5,
                "item_price_list_reference" : 0,
                "item_total_sale_value" : 62.5,
                "item_total_tax_value" : 12.5
            },
            {
                "item_name" : "Dress Shirt / Cotton / Large",
                "item_system_id" : "5051599d-40c2-a66a-11e8-21fbd07bb8a4",
                "item_identifier" : "10021",
                "item_category" : "sales-revenue",
                "item_quantity" : 1,
                "item_net_unit_sale_value" : 75,
                "item_net_unit_discount_value" : 0,
                "item_net_unit_member_value" : 0,
                "item_net_unit_cost_value" : 20,
                "item_unit_tax_value" : 15,
                "item_price_list_reference" : 0,
                "item_total_sale_value" : 75,
                "item_total_tax_value" : 15
            }
        ]
        }  
    

    使用MongoDB 3.6,您可以使用
    $dateFromString
    设置时区。这将返回一个
    ISODate()
    ,您可以使用
    $gt
    $lt
    进行查询:

    db.collection.aggregate([{
        "$project": {
            "transaction_date": {
                "$dateFromString": {
                    "dateString": "$transaction_date",
                    "timezone": "America/New_York"
                }
            }
        }
    }])
    
    这会回来的

    {
      "_id": ObjectId("5ab485c669150d532c41769f"),
      "transaction_date": ISODate("2018-03-07T16:36:48Z")
    }
    

    您可以在这里尝试:

    so,升级到Mongo 3.6 so日期排序,但是,仍然是本地时间与UTC的永不结束的集群周期。如果我需要比较全球价值观,我需要世界各地公司的当地时间背景。存储用于查找目的的本地时间是否可行?一个脚本如何提供这种外观?有没有关于声明适用于所有时区的特定时间和日期的想法?比如,我想要每个国家周一下午1点的销售额——不是按时区转换,而是具体到下午1点。谢谢