【问题标题】:find in array between dates in mongo在 mongo 的日期之间的数组中查找
【发布时间】:2013-08-02 04:37:23
【问题描述】:

我有 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]。

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

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

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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}}}
          ]
        }
      )
      

      【讨论】:

      • 如果time 是一个对象数组而不是一个数字数组呢?
      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 2020-07-19
      相关资源
      最近更新 更多