2014-10-31 80 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

相關問題