此语法是查找任何对象“ gt”的日期或两个带有“ lt”的日期之间的内容,所以我这样做:
HttpHeaders
这是结果,它有效:
db.compte.aggregate([
{
$project: {
time: {
$filter: {
input: "$auditMessages",
as: "auditMessages",
cond: {
$and: [
{
$gt: ["$$auditMessages.timestamp", "2020-05-20T07:18:42.115Z"]
}
]
}
}
}
}
}
]);
现在我想查找日期,月份和年份,例如,我想要这样的时间戳: 年:2020 月:05 一天:20 时间:07 分钟:18毫秒:42
谢谢。
答案 0 :(得分:0)
您需要的是聚合运算符$dateToParts:
作为您的日期字段,即; timestamp
在数组中,我们正在使用$map
进行迭代并合并所有字段year
,month
,hour
,minute
等。 。还原为实际对象,然后将其推回time
数组。
db.collection.aggregate([
{
$addFields: {
time: {
$map: {
input: "$time",
in: {
$mergeObjects: [
"$$this",
{
$dateToParts: {
date: "$$this.timestamp"
}
}
]
}
}
}
}
}
])
测试: mongoplayground
注意:
以防万一,如果您的timestamp
字段是字符串,则需要使用$dateFromString运算符将其转换为日期。检查以下内容:mongoplayground
更改将在此处:
{
$dateToParts: {
date: {
$dateFromString: {
dateString: "$$this.timestamp"
}
}
}
}