在mongo中的日期之间查找数组

时间:2013-08-01 10:02:54

标签: mongodb mongodb-query

我有mongo文件:

{
    id:1
    time:[
        1,
        2,
        10
    ]
}
{
    id:2
    time:[
        1,
        4,
        8,
        10
]
}

我想查找所有文档,其时间介于3到5之间或介于7或9之间(文档ID为2)。我不知道这是怎么回事。

我试试:

mongo.find( $or : [{time:{$gte:3, $lte:5}}, {time:{$gte:7, $lte:9}}] )

和mongo返回id为1和2的文档,但我需要时间为[4,8]的id2。

如何将条件应用于数组的每个元素,但不是整个数组?

P.S。大小数组“时间”可能不同

2 个答案:

答案 0 :(得分:3)

如果您使用'time'数组作为另一个存储阵列的占位符,那么之前使用elemMatch的注释应该可以帮助您,因为这应该可以应对其他数字搜索,例如考试分数。

但是,如果您正在使用它来处理日期/时间等,那么您最好使用unix时间戳进行存储,因为这是通过整数完成的,很容易在mongodb中搜索和存储,并且支持很容易对于大多数编程语言而言。 (例如:php:mktime()和DateTime :: getTimestamp())。

答案 1 :(得分:2)

尝试使用$elemMatch运算符:

mongo.find({time:{$elemMatch: {$gte:3,$lte:5}}})

喜欢:

mongo.find( 
  {
    $or: [
      {time:{$elemMatch: {$gte:3,$lte:5}}},
      {time:{$elemMatch: {$gte:7,$lte:9}}}
    ]
  }
)