【问题标题】:mongodb aggregation match datemongodb聚合匹配日期
【发布时间】:2019-01-24 11:08:22
【问题描述】:

我有类似的数据

{
    "_id" : ObjectId("5b63e593f033ab66fa25a142"),
    "percent_change_1h" : 0.37,
    "percent_change_24h" : -3.91,
    "percent_change_7d" : -7.08,
    "last_updated" : 1533273443,
    "created_at" : "2018-08-03 05:18:11",
    "updated_at" : "2018-08-03 05:18:11"
}

它的 created_at 日期像这样“2018-08-03 05:18:11” 但我可以在聚合函数中传递日期,如“2018-08-03” 数据未进入本场比赛

我不能使用 $gte 或 $lte 因为只能获取给定的日期数据 查询在这里

$date = "2018-08-15";

$filters = ['$match'=>[
    'quotes'=>$quotes,
    'created_at' => $date]
];

$join = ['$lookup'=>[
    'from' => "cryptocurrencies_list", 
    'localField'=> "crypto_list_id",
    'foreignField'=> "_id",
    'as'=>"listdata"]
];

$limits = ['$limit'=>10];
$query = $detailscollection->aggregate([$filters,$join,$limits]);

【问题讨论】:

  • 这里有什么问题?
  • @anthony Winzlet 问题是查询不返回任何数据
  • 这里的quotes 是什么? createdAt 字段的类型是什么?你的 mongodb 版本是多少?
  • 先生,我的数据库条目是这样的 { "_id" : ObjectId("5b63e593f033ab66fa25a142"), "crypto_list_id" : ObjectId("5b63dfc1f033ab605c1bb2d2"), "rank" : 1, "quotes" : "USD" ,“percent_change_7d”:-7.08,“last_updated”:1533273443,“created_at”:“2018-08-03 05:18:11”,“updated_at”:“2018-08-03 05:18:11”}跨度>
  • 我没有为 createdAt 或任何其他字段设置任何类型。对我有什么建议

标签: mongodb mongodb-query


【解决方案1】:

你可以试试下面的聚合

$detailscollection->aggregate([
  [
    '$addFields' => [
      'date' => [
        '$dateToString' => [
          'date' => [
            '$dateFromString' => [
              'dateString' => '$created_at',
              'timezone' => 'America/New_York'
            ]
          ],
          'format' => '%Y-%m-%d'
        ]
      ]
    ]
  ],
  [
    '$match' => [
        'date' => $date, 'quotes' => $quotes
    ]
  ]
])

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 2020-12-22
    • 2019-04-15
    • 2022-10-13
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多