【问题标题】:mongo use $add aggregation within an aggregationmongo 在聚合中使用 $add 聚合
【发布时间】:2021-01-16 22:28:18
【问题描述】:

我正在尝试在相等聚合中添加 1 天,因此应该将 day+1 与在我的数据库中包含 ISODATE 的字段 modifiedAt 进行比较。

很遗憾,我无法做到这一点。 mongodb compass 中的错误是“字段不能以 $ 或 .字段路径是 $add'


{"$match":
   {"$expr":
    {
      "$eq":["$modified",{"$add": [ISODate('xxx'),1*24*60*60000]}]}
    }

}

【问题讨论】:

  • 您是否对已经是 Date 的值使用 ISODate()?您无需将Date 值转换为Date。直接添加日期值。
  • 字段modifiedAtmodified?
  • 字段:modifiedAt
  • 为什么要查询modified
  • 我匹配两个日期:修改日期和第二天的 (ISODate + 1 天)。

标签: mongodb mongodb-query aggregation-framework aggregation


【解决方案1】:

您的查询似乎按预期工作:

mongos> db.f.find()
{ "_id" : ObjectId("60038464a2d94094f8a216bc"), "modified" : ISODate("2021-01-17T00:27:16.280Z") }
{ "_id" : ObjectId("6003853ca2d94094f8a216bd"), "modified" : ISODate("2021-01-17T02:27:16.280Z") }
{ "_id" : ObjectId("60038544a2d94094f8a216be"), "modified" : ISODate("2021-01-16T02:27:16.280Z") }
{ "_id" : ObjectId("6003855fa2d94094f8a216bf"), "modified" : ISODate("2021-01-18T02:27:16.280Z") }
mongos> db.f.aggregate( [  {"$match":  {"$expr":  { "$eq":["$modified",{"$add": [ISODate("2021-01-17T02:27:16.280Z"),1*24*60*60000]}]}    } } ])
{ "_id" : ObjectId("6003855fa2d94094f8a216bf"), "modified" : ISODate("2021-01-18T02:27:16.280Z") }
mongos> 

【讨论】:

  • 这对我还是不起作用,检查上面的错误信息
  • 命令是 $match,唯一的变量是 ISODATE,即 ISODate('2020-01-14T10:27:04.669+00:00')
  • 我不得不将我的指南针更新到最新版本似乎旧版本无法计算某些命令
【解决方案2】:

我必须将我的 Compass 更新到新版本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2018-07-15
    • 2017-08-24
    相关资源
    最近更新 更多