2017-06-19 82 views
1

在我的MongoDB集合我有一個紀錄:如何在mongodb的日期範圍內獲得記錄?

//mongodb field: "birth_date": "1983-05-06T16:26:32.613Z" 

在這裏,我找到的查詢,以獲得在該範圍的記錄:

var birthYear = 1983; 
var birthDateStart = new Date('1.1.' + birthYear); //Sat Jan 01 1983 00:00:00 GMT+0100 (Mitteleuropäische Zeit) 
var birthDateEnd = new Date('12.30.' + birthYear); //Fri Dec 30 1983 00:00:00 GMT+0100 (Mitteleuropäische Zeit) 
    var cursor = db.collection('users').find({ 
      birth_date: {$gte: birthDateStart, $lt: birthDateEnd} 
     }) 

我認爲這個問題是日期格式,如何我可以得到與數據庫中相同的Date()格式嗎?

我以前variety獲得DB模式:

+--------------------------------------------------+ 
| key   | types | occurrences | percents | 
| ------------ | -------- | ----------- | -------- | 
| _id   | ObjectId |   1 | 100.0 | 
| bio   | String |   1 | 100.0 | 
| birth_date | String |   1 | 100.0 | 
+--------------------------------------------------+ 

我用的是 'MongoDB的' 包express.js - 而不能使用ISODate()。

ReferenceError: ISODate is not defined 
+0

正是在這種格式。您正在查看「串化」表單。但是你的數據本身可能是字符串。從[Mongo Shell]中查看您的實際數據(https://docs.mongodb.com/manual/reference/program/mongo/#bin.mongo)。這將確定你的''birth_date'數據實際上是什麼樣子 –

+0

也應該是'new Date(「yyyy-mm-dd」)'在UTC時間段中實際構造一個Date對象作爲你的MongoDB數據應該被存儲,但是我們需要看到數據的實際表示。 –

+0

[在兩個日期之間查找對象MongoDB]可能的重複(https://stackoverflow.com/questions/2943222/find-objects -between-dates-mongodb) –

回答

0

謝謝你的所有提示。問題是,birth_date字段被保存爲字符串。

我想在本答案中向您展示如何在集合中的所有記錄中將字段的格式從字符串更改爲日期,然後在只保存生日時按年齡(按年)進行搜索。也許它可以幫助別人。

改變字符串格式到外地birth_date日期:

mongo.connect(url, function (err, db) { 
     console.log(err); 
     var resultArray = []; 
     var cursor = db.collection('users').find({}); 
     cursor.forEach(function (doc, err) { 
      console.log(doc); 
      db.collection('users').update({_id: doc._id}, {$set: {birth_date: new Date(doc.birth_date)}}); 
     }, function() { 
      db.close(); 
      res.send("Done!"); 
     }) 
    }) 

查找誰是18年老用戶:

var search_age = 18; 
var birthYear = new Date(Date.now()).getFullYear() - search_age; 
var birthDateStart = new Date(birthYear, 0, 1); 
var birthDateEnd = new Date(birthYear, 11, 31, 23, 59, 59, 999); 
var resultArray = []; 

mongo.connect(url, function (err, db) { 
    console.log(err); 
    var resultArray = []; 
    var cursor = db.collection('users').find({ 
      birth_date: {$gte: birthDateStart, $lt: birthDateEnd}, 
     }) 
     ; 
    cursor.forEach(function (doc, err) { 
     resultArray.push(doc); 
    }, function() { 
     db.close(); 
     res.send(resultArray); 
    }) 
}) 
+1

您可以接受自己的答案,這樣其他人就會知道答案已經答覆,並且可以將其鏈接爲重複,如果其他類似問題被問到。 ;-) – RobG

相關問題