最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - MongoDB - Get Data from startDate to endDate - Stack Overflow

programmeradmin4浏览0评论

So, I have JSON like this in DB ( I use mongoDB )

{ 
    "uSN": "100030001",
    "timestamp": 1470009600,
    "timetag": 1082016,
    "monthtag": 82016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_01082016_11_10"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1470096000,
    "timetag": 2082016,
    "monthtag": 82016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_02082016_11_10"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1469850900,
    "timetag": 30072016,
    "monthtag": 72016,
    "hourtag": 10,
    "mintag": 55,
    "yeartag": 2016, 
    "id": "d100030001_30072016_10_55"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1469923200,
    "timetag": 31072016,
    "monthtag": 72016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_31072016_11_10"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1469577600,
    "timetag": 27072016,
    "monthtag": 72016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_27072016_11_10"
  }

I'm trying to do query from my mongo shell to get Data from 30-07-2016 until 01-08-2016.

I'm using this:
db.dataProfTable.find({ uSN: '100030001', timestamp : {'$gte': new Date(1469836800), '$lte': new Date(1470009600)})
and
db.dataProfTable.find({'uSN': '100030001', 'timetag': {$gte: '30072016', $lt: '01082016'}})

But it doesn't work. How can I fix this issue?

So, I have JSON like this in DB ( I use mongoDB )

{ 
    "uSN": "100030001",
    "timestamp": 1470009600,
    "timetag": 1082016,
    "monthtag": 82016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_01082016_11_10"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1470096000,
    "timetag": 2082016,
    "monthtag": 82016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_02082016_11_10"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1469850900,
    "timetag": 30072016,
    "monthtag": 72016,
    "hourtag": 10,
    "mintag": 55,
    "yeartag": 2016, 
    "id": "d100030001_30072016_10_55"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1469923200,
    "timetag": 31072016,
    "monthtag": 72016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_31072016_11_10"
  },
  { 
    "uSN": "100030001",
    "timestamp": 1469577600,
    "timetag": 27072016,
    "monthtag": 72016,
    "hourtag": 11,
    "mintag": 10,
    "yeartag": 2016, 
    "id": "d100030001_27072016_11_10"
  }

I'm trying to do query from my mongo shell to get Data from 30-07-2016 until 01-08-2016.

I'm using this:
db.dataProfTable.find({ uSN: '100030001', timestamp : {'$gte': new Date(1469836800), '$lte': new Date(1470009600)})
and
db.dataProfTable.find({'uSN': '100030001', 'timetag': {$gte: '30072016', $lt: '01082016'}})

But it doesn't work. How can I fix this issue?

Share Improve this question asked Aug 1, 2016 at 7:36 yogieputrayogieputra 6572 gold badges14 silver badges28 bronze badges 2
  • 1 Check documentation on $and operation and use it for $gte and $lte. – Mr Tarsa Commented Aug 1, 2016 at 7:45
  • What is the Mongo data type of timestamp and timetag? Is that actually timestamp or just double? – notionquest Commented Aug 1, 2016 at 8:25
Add a ment  | 

3 Answers 3

Reset to default 4

Given the input as the date range "30-07-2016" to "01-08-2016", construct some JS dates to use in your query. Get the timestamps in seconds (as the document schema implies) from the dates by dividing by 1000:

var start = new Date("2016-07-30")/1000,
    end = new Date("2016-08-01")/1000;
db.dataProfTable.find({
    "timestamp": { "$gte": start, "$lte": end }
})

Sample Output

/* 1 */
{
    "_id" : ObjectId("579f04ccd8f31a5788eba0fb"),
    "uSN" : "100030001",
    "timestamp" : 1470009600,
    "timetag" : 1082016,
    "monthtag" : 82016,
    "hourtag" : 11,
    "mintag" : 10,
    "yeartag" : 2016,
    "id" : "d100030001_01082016_11_10"
}

/* 2 */
{
    "_id" : ObjectId("579f04ccd8f31a5788eba0fd"),
    "uSN" : "100030001",
    "timestamp" : 1469850900,
    "timetag" : 30072016,
    "monthtag" : 72016,
    "hourtag" : 10,
    "mintag" : 55,
    "yeartag" : 2016,
    "id" : "d100030001_30072016_10_55"
}
     Try This !!!

For,

1.Monthtag :

db.dataProfTable.find({ uSN: '100030001', $and:[ {monthtag : {$gte: 72016}},{monthtag : {$lte: 82016}}]})

2.Timestamp :

db.dataProfTable.find({ uSN: '100030001', $and:[ {timestamp : {$gte: 1469836800}},{timestamp : {$lte: 1470009600}}]})

To query by timestamp use below:

var start = new Date("07/30/2016").getTime()/1000 //Date Format:mm/dd/yyyy. Doing by 1000 since u stored in seconds
var end = new Date("08/01/2016").getTime()/1000
db.dataProfTable.find({ uSN: '100030001', $and:[ {timestamp : {$gte:start}},{timestamp : {$lte: end}}]})

To query by timetag use below:

db.dataProfTable.find({'uSN': '100030001', 'timetag': {$gte: 30072016, $lt: 01082016}}) // Since u stored as number for timetag
发布评论

评论列表(0)

  1. 暂无评论