我怎样才能检查给定的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是在MongoDB中的两个date之间?"

我没有正确理解你的问题,但你应该把你的date存储为date。 你可以devise你的模式是这样的

  fromDate: Date, untilDate: Date 

并查找date是否在fromDate和untilDate之间存储的date之间,您可以使用$ gte$ lt

  $gte: fromDate, $lte : untilDate 

如果你想在datetodate之间find你的查询date ,并且检查modelnameStatus那么可以遵循这个条件。

根据您给定的模型结构,您需要使用. )表示法来检查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的情况下,