find()上的字段的MongoDB条件投影



我有一个mongo查询,如下所示:

db.collection_a.find(
{
Time: { $gte: new Date(beginTime), $lte: new Date(endTime) },
},
{
Value: 1,
UpperBound: 1,
LowerBound: 1,
Time: 1,
}
)

我希望项目字段Value仅在时间介于某个范围之间时返回。对于find查询返回的所有其他文档,我不希望Value字段包含在结果中。

有什么办法我能做到这一点吗?

也许是这样的:

db.collection.aggregate([
{
"$project": {
Time: 1,
UpperBound: 1,
LowerBound: 1,
"Value": {
"$cond": [
{
$and: [
{
$lt: [
"$Time",
ISODate("2015-05-18T16:00:00Z")
]
},
{
$gt: [
"$Time",
ISODate("2013-05-18T16:00:00Z")
]
}
]
},
"$Value",
"$$REMOVE"
]
}
}
}
])

解释如下:您在项目阶段为Value键/值对添加$cond,根据提供的日期范围,它将设置相同的值,或者如果时间在范围之外,它将删除Value字段。

操场

最新更新