2

我有 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 的文档,但我需要 id2 和 time[4, 8]。

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

ps 大小数组“时间”可能不同

4

2 回答 2

3

如果您使用 'time' 数组作为另一个存储数组的占位符,那么前面带有 elemMatch 的注释应该可以帮助您,因为这应该可以处理其他数字搜索,例如考试成绩。

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

于 2013-08-01T11:39:43.203 回答
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}}}
    ]
  }
)
于 2013-08-01T10:14:50.857 回答