gpt4 book ai didi

javascript - 带有日期的嵌套对象数组的MongoDB聚合

转载 作者:行者123 更新时间:2023-12-04 09:31:52 25 4
gpt4 key购买 nike

我有这样的数据

{
"_id": ObjectId("52ed12c144aecc4bf004d0b6"),
"active": true,
"name": "woslo",
"specialDays": [
{
"_id": ObjectId("5f0576196198a715b0a72c14")
"status": true
"date": 2020-07-08T04:00:00.000+00:00
},
{
"_id": ObjectId("5f05a3726198a715b0a72c94")
"status": false
"date": 2020-07-09T04:00:00.000+00:00
}
]
}
我想使用此查询获取记录
   db.serviceProviders.aggregate([
{
$match: {
specialDays: {
$elemMatch: {
$or: [
{
$and: [
{
date: model.date // 2020-07-09T06:00:00.000Z
},
{
status: true
}
]
},
{
date: {
$ne: model.date //2020-07-09T06:00:00.000Z
}
}
]
}
}
}
}
]);

场景是 : 如果 date 出现在 specialDays 数组中并且状态应该是 true ,或者 date 不应该出现在 specialDays 对象的数组中,则获取此记录。
但是每次它获取高于偶数状态的相同记录时,状态为假或日期存在于数组中。
你能帮我弄清楚如何解决吗,我在 Mongo 指南针聚合中尝试了很多查询 ISODate('2020-07-08') 但仍然无法正常工作。
谢谢
快乐编码。

最佳答案

问题出在您的 $ne健康)状况。如果状态为假,则您的 $ne条件为真。由于它是逻辑 OR,因此您将获得输出。
怎么样this ?

db.collection.aggregate([
{
$match: {
specialDays: {
$elemMatch: {
$or: [
{
$and: [
{
date: new Date("2020-07-09T04:00:00.000+00:00")
},
{
status: true
}
]
},
{
date: {//Changes here
$gte: new Date("2020-07-09T06:00:00.000+00:00"),
$lte: new Date("2020-07-09T23:59:59.000+00:00")
}
}
]
}
}
}
}
])
或者
this
您的另一个原因 $ne条件为真,因为它满足 specialDays 中的第一个数组元素大批
db.collection.aggregate([
{
$match: {
specialDays: {
$elemMatch: {
$or: [
{
$and: [
{
date: new Date("2020-07-09T04:00:00.000+00:00")
},
{
status: true
}
]
},
{
$and: [
{
date: {
$ne: new Date("2020-07-09T04:00:00.000+00:00")
}
},
{
status: false
}
]
}
]
}
}
}
}
])

关于javascript - 带有日期的嵌套对象数组的MongoDB聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62808407/

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