mongodb - 如何使用 $dateFromString 转换数组中的日期?

标签 mongodb aggregation-framework pymongo

我正在尝试使用 $dateFromString 将数组中的时间戳转换为日期

我尝试从中转换日期的示例文档:

{
    "_id" : ObjectId("5cbc5efc8af5053fd8bdca31"),
    "ticker" : "ticker",
    "currency" : "currency",
    "daily" : [ 
        {
            "timestamp" : "2019-04-18",
            "open" : "5.3300",
            "high" : "5.3300",
            "low" : "5.2000",
            "close" : "5.2700",
            "volume" : "6001"
        }, 
        {
            "timestamp" : "2019-04-17",
            "open" : "5.1500",
            "high" : "5.2900",
            "low" : "5.1500",
            "close" : "5.2700",
            "volume" : "37659"
        }, 
        {
            "timestamp" : "2019-04-16",
            "open" : "4.7100",
            "high" : "5.3000",
            "low" : "4.7100",
            "close" : "5.1500",
            "volume" : "112100"
        }
    ]
}

pymongo中的聚合查询:

db.test.aggregate([{
        '$project': {
            'daily.timestamp': {
                '$dateFromString': {
                    'dateString': '$daily.timestamp',
                    'format':  '%Y-%m-%d'
                }
            }
        }
    }])

这会引发以下错误:

pymongo.errors.OperationFailure:$dateFromString 要求 'dateString' 是一个字符串,发现:值为 ["2019-04-18", "2019-04-17", "2019-04-16", 的数组“2019-04-15”......]

甚至可以将 $dateFromString 应用于包含数百个元素的数组吗?

最佳答案

您可以使用 $map aggregation operator$dateFromString 应用于数组中的每个元素:

db.test.aggregate([{
  "$project": {
    "ticker": 1,
    "currency": 1,
    "daily": {
      "$map": {
        "input": "$daily",
        "in": {
          "timestamp": { 
            "$dateFromString": {
              "dateString": '$$this.timestamp',
              "format":  '%Y-%m-%d'
            }
          },
          "open": "$$this.open",
          "high": "$$this.high",
          "low": "$$this.low",
          "close": "$$this.close",
          "volume": "$$this.volume"
        }
      }
    }
  }
}])

关于mongodb - 如何使用 $dateFromString 转换数组中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55783350/

相关文章:

java - mongo java用于查找和更新插入嵌套数组元素

mongodb - mongodb 随着时间的推移而获得的 yield

node.js - 如何通过 $project 中提供的 _id 与 mongodb 聚合进行 $match?

mongodb - 如何在 mongodb 中对文档进行排序,以便空值出现在最后

mongodb - 将 2 个 mongoDB 集合中的数据合并到 1 个文档中

python - 使用 update_one 更新 pymongo 中的嵌套字典(python mongoDB)

javascript - 我可以通过 id 从 Mongo 检索多个文档吗?

node.js - Mongoose ,更新子文档

mongodb - CentOS for MongoDB 进程上的 bindIP 退出并显示错误代码

MongoDB - 简单的子查询示例