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

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

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

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

最佳答案

如果您使用“时间”数组作为另一个存储数组的占位符,那么之前对 elemMatch 的注释应该会对您有所帮助,因为这应该可以处理其他数字搜索,例如考试成绩。

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

关于mongodb - 在 mongo 中的日期之间的数组中查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17990948/

相关文章:

mongodb - 使用 Mongodb oplog 跟踪数据更改历史

regex - 如何使用 mongoose find 获取包含部分字符串的所有值?

mongodb - 在原始 MongoDB 协议(protocol)上实现 "count"方法的正确方法是什么?

database - 计算符合条件的数组元素

javascript - Mongoose 查询生成器。或未返回预期结果

java - MongoDB中不区分大小写的排序

node.js - 获取 MongoDB 中特定月份和特定年份的文档

mongodb - 如何在 $lookup(聚合)中将 ObjectID 转换为 String

MongoDB:将来自多个集合的数据合并为一个..如何?

node.js - 仅当 mongodb 中的 operationType 为 'update' 时才过滤