mongodb - 如何在 mongodb 查询中比较两次?

标签 mongodb mongodb-query

我的 mongodb 集合中有两个字段 timeInarrivalTime 。 timeIn字段表示用户应到达的时间,arrivalTime表示实际到达的时间。

timeIn:"2020-05-24T18:31:00.000Z",
arrivalTime:2020-05-27T02:36:37.558+00:00

如何比较 timeInarrivalTime 以便将那些在 timeIn 之后到达的人标记为“迟到”。

$project: {
    name: 1,
    isPresent: {
        $cond: {
            if: {
                $lte: [ISODate("$arrivalTime"), ISODate("$timeIn")]
            },
            then: true,
            else: false
        }
    }
}

最佳答案

如果您将日期存储为字符串,则可以比较两者(作为字符串),假设您确保它们始终采用相同的格式和时区。

$project: {
    name: 1,
    isPresent: {
        $cond: {
            if: {
                $lte: ["$arrivalTime","$timeIn"]
            },
            then: true,
            else: false
        }
    }
}

话虽如此,不建议这样做,因为我认为“确保”这样的事情不是一个好方法。那么你还能做什么呢?

  1. 将日期另存为Date。这将需要您更新代码和数据库,但在我看来,这是最好的长期解决方案。
  2. 如果您使用的是 Mongo 3.6+ 版本,您可以使用 Mongo 的 $dateFromString
$project: {
    name: 1,
    isPresent: {
        $cond: {
            if: {
                $lte: [{$dateFromString: {dateString: "$arrivalTime"}}, 
                       {$dateFromString: {dateString: "$timeIn"}}]
            },
            then: true,
            else: false
        }
    }
}

关于mongodb - 如何在 mongodb 查询中比较两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62061008/

相关文章:

javascript - Object.keys,如何获取mongodb中的键列表

javascript - Mongoose - 分组、计数并在集合中找不到任何内容时返回 0

mongodb - 如何使用 typegoose 自动填充 Mongoose

javascript - 关于帖子、评论、保存和喜欢的 Mongodb 数据结构

arrays - 为动态填充的对象数组生成 Mongoose 模式

java - 如何使用 MongoDB 中的 Criteria 进行投影?

mongodb - mongodb聚合中的项目嵌套嵌入文档

c# - 使用 InsertOneAsync (.NET Driver 2.0) 插入新文档

mongodb - 获取 MongoDB 集合中第一条插入记录的最佳方法

mongodb - 展开后将元素 reshape 为数组