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

我应该如何进行以下mongoDB查询?,mongodb,crud,Mongodb,Crud,假设我有以下MongoDB索引: 日(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}

假设我有以下MongoDB索引:

  • 日(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}
我想手动检查数据,因为我得到了一个大错误,如前所述

如果数据范围为:

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

我想我可能错过了一些明显的东西,有人能帮我解释一下吗?谢谢大家!

您是否尝试过组合$or和$and运算符。根据您的描述,我认为您的查询应该是以下形式:

哪一天是10点30分 (小时等于或大于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 } } 
             ] } 
    ]
});

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

我想您可能应该编辑您的另一个问题,因为它不能解释您在那里做了什么。同样,这也不是很清楚。这些值是在单独的文档中,还是在同一个文档中,或者确切地说是什么。。因为另一个问题是关于切分的,而这个问题是关于查询的,所以我宁愿保留这两个问题。这些值在不同的文档中。我想查询一系列文档。我已经编辑了这个问题,希望它更有意义。对不起,描述不好。我让你更清楚你在做什么,但问题是什么?除了提到另一个关于从分片集群操作接收到错误的问题外,我认为没有问题。大概这就是您正在运行的查询,这就是错误?完全不知道答案对大多数人来说似乎很清楚。。但我对从{Hour:10,Second:2400}到{Hour:12,Second:1200}范围查询文档感到困惑。注意“小时”字段值的差异。如果有人能给我提供相应的查询,那就太好了。你为什么不使用日期类型呢?我想你的查询有问题吗?这似乎不是一个有效的JSON,因为它可能是在火车上的手机上输入的。它想做的事对你有帮助吗?让你更接近答案吗?如果是这样,我们可以考虑修复JSON。是的,请!我相信答案是$and和$or运算符的组合。谢谢您的帮助。我不在数据库,我会尽快尝试。顺便说一句,在这种情况下,不是所有文档都会使用$or运算符返回吗?由于任何>=2400或我昨晚已经尝试了您的查询,因此查询花费了相当长的时间,似乎遍历了整个集合。但没问题,伙计!我感谢你的帮助!