我该如何进行以下mongoDB查询?

时间:2015-03-03 05:00:10

标签: mongodb crud

假设我有以下MongoDB索引:

  • Day(1-365)
  • 小时(0-23)
  • 秒(0-3599)

编写者:

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}})

我想我可能会遗漏一些明显的东西,有人会对我有所了解吗?谢谢!

1 个答案:

答案 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 } } 
             ] } 
    ]
});

我已尝试使用数据,它会给出我期望的结果。希望这能为您解决问题。