我有一个MongoDB数据库,其数据格式为{“year”:2016,“day”:364},此数据库的年份范围很广。例如,如果我需要2016年第307至350天的文件,我会使用
Flux.find({year:{$gte:2016, $lt: 2016+1}, day: {$gte:307, $lt: 350}})
工作得很好。但如果我需要从2016年第350天到2017年第25天的文件,
Flux.find({year:{$gte:2016, $lt: 2017+1}, day: {$gte:350, $lt: 25}})
返回0个文件。请告诉我解决此问题的好方法
答案 0 :(得分:0)
此查询即使有效,也会返回2016年第0-25天的数据,这是不正确的。 使用MongoDB的$or运算符来实现正确的查询。像这样:
dbFlux.find({
$or: [
{ year:{ $gte: 2016, $lt: 2016+1 }, day: { $gte: 350 } }),
{ year:{ $gte: 2017, $lt: 2017+1 }, day: { $lt: 25 } })
]
})
答案 1 :(得分:0)
以下答案是正确的,但只是一个简单的修改,
Flux.find({
$or : [
{ year: 2016, day: {$gte: 350} },
{ year: 2017, day: {$lte: 25 } }
]
})
基本上,您正在寻找" $或"运营商。您的查询问题是{year:2016,day:13}和{year:2017,day:364}等记录也将通过。