gpt4 book ai didi

mongodb - 检查匹配查询聚合mongodb中是否存在字段

转载 作者:行者123 更新时间:2023-12-02 16:15:27 24 4
gpt4 key购买 nike

我有一个 mongodb 事件集合,我想从中获取当前可用的事件,所以我正在使用这样的匹配查询

   Event.aggregate([ { $match: { isActive: true, ...matchQuery, startDate:{$lt:today}, endDate:{$gt:today} } },])

问题是不是我数据库中的所有事件都有 startDate 和 enDate 字段,我也想获取这些事件,所以我想检查 startDate 和 endDate 是否存在,如果它们不存在,那么它们应该比今天的 lt 和 gt ' 存在并且文档与查询的其余部分匹配,我想得到它。我试过这种方式,但不起作用

{ $match: { isEnabled: true, ...matchQuery, startDate ? {startDate:{$lt:today}}, endDate ?  endDate:{$gt:today} } },

谢谢

最佳答案

所以我们的想法是在以下位置获取所有文档:

  1. startDate AND endDate 不退出。

  1. 今天 介于 startDate AND endDate 之间。

试试这个:

let today = new Date();

db.events.aggregate([
{
$match: {
isActive: true,
$or: [
{
startDate: { $exists: false },
endDate: { $exists: false }
},
{
startDate: { $lt: today },
endDate: { $gt: today }
}
]
}
}
])

输出:

{
"_id" : ObjectId("..."),
"isActive" : true,
"startDate" : ISODate("2021-03-01T00:00:00.000+05:30"),
"endDate" : ISODate("2021-03-31T00:00:00.000+05:30")
},
{
"_id" : ObjectId("..."),
"isActive" : true
}

测试数据:

{
"_id" : ObjectId("..."),
"isActive" : true,
"startDate" : ISODate("2021-03-01T00:00:00.000+05:30"),
"endDate" : ISODate("2021-03-31T00:00:00.000+05:30")
},
{
"_id" : ObjectId("..."),
"isActive" : true,
"endDate" : ISODate("2021-03-31T00:00:00.000+05:30")
},
{
"_id" : ObjectId("..."),
"isActive" : true,
"startDate" : ISODate("2021-03-01T00:00:00.000+05:30")
},
{
"_id" : ObjectId("..."),
"isActive" : true
},
{
"_id" : ObjectId("..."),
"isActive" : true,
"startDate" : ISODate("2021-02-01T00:00:00.000+05:30"),
"endDate" : ISODate("2021-03-03T00:00:00.000+05:30")
}

关于mongodb - 检查匹配查询聚合mongodb中是否存在字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66869720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com