2014-10-31 60 views
0

我正在使用mongodb存储日期时间。在没有日期时间的特定或范围月份上查询Mongodb

例如

DB数据:

[ 
{ 
    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({ '日期':{$月: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,但它不是我想要的,我不想过滤年份。

+0

是你的'date'值的字符串(如您展示)还是BSON日期? – JohnnyHK 2014-10-31 17:13:04

+0

@JohnnyHK,BSON日期,我编辑它。谢谢。 – 2014-10-31 17:45:57

回答

4

$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 
} 
+0

很好,但你的方式需要知道所有领域的名称是什么。有办法做到这一点,如果我不知道字段名称? – 2014-10-31 18:21:48

+0

排序,你可以把'doc:$$ ROOT'放在你最初的'$ project'中,而不是单个字段中。 – JohnnyHK 2014-10-31 18:26:41

相关问题