假设我有以下MongoDB索引:
编写者:
db.coll.ensureIndex({Day:1, Hour:1, Second:1})
文件的格式为:
{ Day: 1, Hour: 10, Second: 1200, Price: 100}
{ Day: 1, Hour: 10, Second: 1201, Price: 101}
{ Day: 1, Hour: 10, Second: 1202, Price: 103}
{ Day: 1, Hour: 10, Second: 1203, Price: 102}
{ Day: 1, Hour: 10, Second: 1204, Price: 101}
实质上它是某些商品随时间的价格变动。
我应该如何形成一个mongoDB查询来提取具有以下范围的数据:
min: {Day: 1, Hour: 10, Second: 2400}
max: {Day: 1, Hour: 12, Second: 1200}
我想手动检查数据,因为我遇到了here所描述的chunkTooBig错误
如果数据范围是:
min: {Day: 1, Hour: 10, Second: 1200}
max: {Day: 1, Hour: 10, Second: 2400}
我可以通过以下方式轻松形成查询:
db.coll.find({Day:1, Hour:10, Second:{$gte:1200, $lt:2400}})
我想我可能会遗漏一些明显的东西,有人会对我有所了解吗?谢谢!
答案 0 :(得分:0)
您是否尝试过合并$或$和运算符。根据您的描述,我认为您的查询应该是以下形式:
哪一天是10和 (小时为10或更多,秒数大于或等于2400) 和 (小时为12或更小,秒小于或等于1200)
这是否更能表达您的目标?即你也需要考虑小时数字段。
哪个查询类似于:
db.coll.find({
$and: [
{ Day : 1 },
{ $or: [
{ $and: [
{ Hour : 10 },
{ Second : { $gte : 2400 } }
] },
{ Hour : { $gt : 10 } }
] },
{ $or: [
{ $and: [
{ Hour : 12 },
{ Second : { $lte : 1200 } }
] },
{ Hour : { $lt : 12 } }
] }
]
});
我已尝试使用数据,它会给出我期望的结果。希望这能为您解决问题。