我怎样才能检查给定的date是在MongoDB中的两个date之间?
{ "_id": { "$oid": "asdf976" }, "Categories": [{ "mainmodels": [{ "submodels": [{ "price": "2000", "submodelname": "lumia021", }, { "price": "2000", "submodelname": "lumia341", } ], "Status": "Active", "modelname": "lumia", "fromdate": "15/04/2016", "todate": "29/04/2016" }], "brand": "nokia" }], "rank": "1", "name": "first Mobile station" } { "_id": { "$oid": "asdf976" }, "Categories": [{ "mainmodels": [{ "submodels": [{ "price": "2000", "submodelname": "lumia a02", }, { "price": "2000", "submodelname": "lumia trend", } ], "Status": "Active", "modelname": "lumia", "fromdate": "20/04/2016", "todate": "21/04/2016" }], "brand": "nokia" }], "rank": "2", "name": "Zahid station" } { "_id": { "$oid": "asdf976" }, "Categories": [{ "mainmodels": [{ "submodels": [{ "price": "2000", "submodelname": "trend 45", }, { "price": "2000", "submodelname": "trendz", } ], "Status": "Active", "modelname": "trend", "fromdate": "10/04/2016", "todate": "21/04/2016" }], "brand": "samsung" }], "rank": "3", "name": "mobi cell station" }
上面我添加了我的数据存储在mongodb数据库中。 我如何才能find数据只有在“状态”:“活跃”,“型号名称”:“lumia”,“date”:“19/04/2016”
以上是我的条件,date的东西只有我不能够在这里给出的date解决是从date和Todate之间,只有它应该给结果
我需要检查给定的date(19/04/2016)这是之间的date和之后,我需要检查“状态”:“活跃”,“模型名称”:“lumia”,
我的控制器:
exports.search = function(req, res) { var condition = { 'modelname': 'lumia', 'Status':'Active' }; Phone.find(condition).sort('-created').populate('user', 'displayName').exec(function(err, phones) { if (err) { return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); } else { res.jsonp(phones); } }); };
模式:
var mongoose = require('mongoose'), Schema = mongoose.Schema; var submodelSchema = { submodelname: {type:String, required: false}, price: {type:String, required: false}, Remainingphones: {type:String, required: false}, Bookedphones: {type:String, required: false}, Numofphones: {type:String, required: false} }; submodelSchema = 'new Schema('+ submodeleSchema +',{_id:true})'; var typeSchema = { vtype: {type:String, required: false}, mainservices: { Status: {type:String, required: false}, modelname : {type:String, required: false}, fromdate: {type: Date,default: Date.now}, todate: {type: Date,default: Date.now} }, submodels: [submodelSchema], default:[] }; typeSchema = 'new Schema('+typeSchema +',{_id:true})'; var PhoneSchema = new Schema({ rank: { type: String, default: '', trim: true }, name: { type: String, default: '', trim: true }, Categories: [typeSchema], default:[] }); mongoose.model('Phone', PhoneSchema);
我没有正确理解你的问题,但你应该把你的date存储为date。 你可以devise你的模式是这样的
fromDate: Date, untilDate: Date
并查找date是否在fromDate和untilDate之间存储的date之间,您可以使用$ gte和$ lt
$gte: fromDate, $lte : untilDate
如果你想在date和todate
之间find你的查询date ,并且检查modelname
和Status
那么可以遵循这个条件。
根据您给定的模型结构,您需要使用点 ( .
)表示法来检查date,如: Categories.mainmodels.fromdate
并且需要使用$lte
( 小于或等于 )和$gte
( 大于或等于 )运算符。
var queryDate = '19/04/2016'; // or like: var queryDate = req.query.date; or as you sent var condition = { 'modelname': 'lumia', 'Status':'Active', 'Categories.mainmodels.fromdate': {$gte: queryDate }, 'Categories.mainmodels.todate': {$lte: queryDate } }; Phone.find(condition).sort('-created').// rest of code
只要修改你的条件variables
var yourDate='19-04-2016'; var condition = { 'modelname':'lumia', 'Status':'Active', 'fromDate':{ $gte: yourDate}, 'untilDate':{$lte : yourDate} };
你可以阅读关于$ gte和$ lte的这个文档
https://docs.mongodb.org/manual/reference/operator/query/gte/
另外,如果date格式不正确,或者datetypes是string,则必须使用Moment.js明确parsingdate。
下面是链接看看吧: http : //momentjs.com/docs/
最好的办法是将date值保存为date而不是string。 在插入数据时,对其他date执行=>'categories.mainmodels.fromdate':new Date('date-string')。 这将在db中创build一个Datetypes,比较容易比较如下。 遵循mm / dd / yyyy格式来创build新的date;
var givenDate = new Date('04 / 19/2016'); (毫米/日/年)
var condition = {'modelname':'lumia','Status':'Active','Categories.mainmodels.fromdate':{$ gte:givenDate},'Categories.mainmodels.todate':{$ lte:givenDate}} ;
Phone.find(条件)的.sort( ' – 创build')。
请注意,而不是只是“datestring”,而插入/更新做新的date(“datestring”),这将创builddate,并将允许你像上面比较。
如果这个值是db中的date本身,记得从你想要比较的string中创builddate。 在你的情况下,你有{$ gte:'date-string'},用另一个replace为{$ gte:new Date('date-string')}。 [只有在数据已经存储为date,并且返回date值而不是datestring的情况下,