簡體   English   中英

MongoDB-從startDate到endDate獲取數據

[英]MongoDB - Get Data from startDate to endDate

所以,我在數據庫中有這樣的JSON(我使用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"
  }

我正在嘗試從mongo shell進行查詢以獲取2016年7月30日至2016年1月8日之間的數據。

我正在使用這個:
db.dataProfTable.find({ uSN: '100030001', timestamp : {'$gte': new Date(1469836800), '$lte': new Date(1470009600)})

db.dataProfTable.find({'uSN': '100030001', 'timetag': {$gte: '30072016', $lt: '01082016'}})

但這是行不通的。 如何解決此問題?

給定輸入日期范圍為“ 30-07-2016”至“ 01-08-2016”,構造一些JS日期以在查詢中使用。 從日期中獲取以秒為單位的時間戳(如文檔架構所暗示),除以1000:

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

樣本輸出

/* 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 !!!

對於,

1.月標簽

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

2. 時間戳記

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

要通過時間戳查詢,請使用以下命令:

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}}]})

要通過時間戳查詢,請使用以下命令:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM