{
"_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数据库中的数据。我怎样才能在任何地方找到数据 “状态”:“活跃”, “modelname”:“lumia”, “日期”: “19/04/2016”
以上是我的条件,日期只有我无法解决的事情 这里给定的日期是在fromdate和todate之间,然后只有它应该给出结果
我需要查看给定日期(2016年4月19日),这是在fromdate和todate之间,之后我需要检查“Status”:“Active”, “modelname”:“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);
答案 0 :(得分:4)
如果您想在fromdate
和todate
之间找到查询日期,还要检查modelname
和Status
,那么可以遵循此条件。
根据您给定的模型结构,您需要使用点(.
)表示法检查您的日期,如: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
答案 1 :(得分:3)
我没有正确理解您的问题,但您应将日期存储为日期。 你可以像这样设计你的模式
fromDate: Date,
untilDate: Date
并查找日期是否存储在fromDate和untilDate之间的日期之间,您可以使用 $ gte 和 $ lt
$gte: fromDate,
$lte : untilDate
答案 2 :(得分:1)
只需将条件变量修改为
即可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/
此外,如果日期格式不正确或日期类型不正确 是字符串,你必须使用Moment.js显式解析它。
以下是Link看看它: http://momentjs.com/docs/
答案 3 :(得分:1)
最好的方法是将日期值保存为Date而不是String。在插入数据时,请执行以下操作:> ' categories.mainmodels.fromdate':新日期('日期字符串')和其他日期相同。这将在db中创建一个Date类型,这将更容易比较,如下所示。请遵循mm / dd / yyyy格式创建新日期;
var givenDate = new Date(' 04/19/2016'); (毫米/日/年)
var condition = { ' modelname':' lumia', '状态':'主动&#39 ;, ' Categories.mainmodels.fromdate':{$ gte:givenDate}, ' Categories.mainmodels.todate':{$ lte:givenDate} };
Phone.find(条件)的.sort(' -created&#39)。
请注意,而不仅仅是" date-string",在插入/更新时会执行新的日期("日期字符串"),这将创建日期,并允许您进行比较上方。
如果值是db中的日期本身,请记住从要与之比较的字符串中创建日期。在您的情况下,您有{$ gte:' date-string'}替换为{$ gte:new Date(' date-string')}等等。 [仅当数据已经存储为日期并且它返回日期值而不是日期字符串时才会遵循。