2017-04-27 49 views
0

我有一个MongoDB模型,它包含一个Date类型的Date.now类型的Date字段。任何日期都转换为ISO日期格式。以dd MMM yyyy格式在MongoDB模型中存储和检索日期

xDate : { 
    type: Date.now, 
    required: true 
} 

我传递当前日期为:模型内部的日期被定义

var d = new Date(); 
var temp = d.toISOString(); 
var subStr = temp.substr(10,temp.length - 1); 
var curDate = temp.replace(subStr, "T00:00:00.000Z"); 
console.log(curDate); 

然而,日期存储为MongoDB的架构内的ISO字符串。我尝试使用猫鼬使用下面的查询进行查询:

X. 
find({ 
    xDate: curDate 
}) 
.exec(function(err, doc) { 
var response = { 
    status : 200, 
    message : doc 
}; 
if (err) { 
    console.log('Error'); 
    response.status = 500; 
    response.message = err; 
} else if (!doc) { 
    console.log("Documents against the date not found in database" ,curDate); 
    response.status = 404; 
    response.message = { 
    "message" : "Documents not found for " + curDate 
    }; 
} 
res 
.status(response.status) 
.json(response.message); 
}); 

我不断收到的数据在那里的空白JSON数组inspite。在表格中,xDate以YYYY-MM-DD格式存储。

回答

0

mongo内的日期不是ISO字符串中的商店。如果将模型保存为Date.now,它将保存一个新的Date对象,而不是一个ISO字符串。所以一个简单的查询方法是通过new Date()查询对象。

另请注意,您的查询很难成为真实的,因为您将难以获得与数据存储完全相同的日期。我认为更好的选择是使用$lt$gt过滤器。

新的查询应该是这个样子:

let currDate = new Date() 
// change the date using class methods 
X.find({ 
    xDate: {$lt: currDate} 
}).exec... 
+0

究竟你“改变使用类方法的日期”是什么意思?你还在'$ lt:curDate'中加入了一个额外的r。 –

+0

使用本地Date对象(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)更改日期并使用Date对象的方法。不要使用字符串替换方法来更改日期。 –

相关问题