【问题标题】:Query Mongodb on specific or range month without year of a datetime在没有日期时间的年份的特定或范围月份查询 Mongodb
【发布时间】:2014-12-28 02:02:33
【问题描述】:

我正在使用 mongodb 来存储日期时间。

示例

数据库数据:

[
{
  id: 1
  date: '2014-11-01T00:00:00.000Z'
},
{
  id: 2
  date: '2013-10-11T00:00:00.000Z'
},
{
  id: 3
  date: '2012-11-21T00:00:00.000Z'
}
]

按第 11 个月过滤,例如 query.find({'date': {$month: 11}}) 应该得到结果:

[
{
  id: 1
  date: '2014-11-01T00:00:00.000Z'
},
{
  id: 3
  date: '2012-11-21T00:00:00.000Z'
}
]

如何进行查询以获得我想要的?

我搜索并得到了Query Mongodb on month, day, year... of a datetime,但这不是我想要的,我不想过滤日期的年份。

【问题讨论】:

  • 您的 date 值是字符串(如您所示)还是 BSON 日期?
  • @JohnnyHK,BSON 日期,我编辑了它。谢谢。

标签: mongodb mongoose


【解决方案1】:

$month是一个聚合运算符,所以只能和aggregate一起使用,不能和find一起使用:

db.test.aggregate([
    {$project: {
        id: 1,
        date: 1,
        month: {$month: '$date'}
    }},
    {$match: {month: 11}},
    {$project: {
        id: 1,
        date: 1
    }}
])

结果:

{
    "result" : [ 
        {
            "_id" : ObjectId("5453d0b73712b66352662484"),
            "id" : 1,
            "date" : ISODate("2014-11-01T00:00:00.000Z")
        }, 
        {
            "_id" : ObjectId("5453d0b73712b66352662486"),
            "id" : 3,
            "date" : ISODate("2012-11-21T00:00:00.000Z")
        }
    ],
    "ok" : 1
}

【讨论】:

  • 很好,但您需要知道所有字段的名称。如果我不知道字段名称,有办法吗?
  • 如果我有 500 万条记录到 $project,这可能需要很长时间。比赛应该是第一步。
猜你喜欢
  • 2013-09-25
  • 2023-03-23
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
相关资源
最近更新 更多