我的 mongodb 集合中有两个字段 timeIn
和 arrivalTime
。 timeIn字段表示用户应到达的时间,arrivalTime表示实际到达的时间。
timeIn:"2020-05-24T18:31:00.000Z",
arrivalTime:2020-05-27T02:36:37.558+00:00
如何比较 timeIn
和 arrivalTime
以便将那些在 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
}
}
}
话虽如此,不建议这样做,因为我认为“确保”这样的事情不是一个好方法。那么你还能做什么呢?
- 将日期另存为
Date
。这将需要您更新代码和数据库,但在我看来,这是最好的长期解决方案。 - 如果您使用的是 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/