[英]MongoDB aggregation with nested array of objects property with date
我有这样的数据
{
"_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 } } ] } } } } ]);
场景是:如果日期存在于 specialDays 数组中并且状态应该为真,或者日期不应该在 specialDays 对象的数组中,则获取此记录。 但是每次它获取相同的记录时,即使状态为假或日期存在于数组中。 请您帮我解决一下,我用ISODate('2020-07-08')在 Mongo 指南针聚合中尝试了很多查询,但仍然无法正常工作。 谢谢快乐编码。
问题在于您的$ne
条件。 如果状态为假,那么您的$ne
条件为真。 由于它是逻辑 OR,因此您将获得 output。
这个怎么样?
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")
}
}
]
}
}
}
}
])
或者
您的$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
}
]
}
]
}
}
}
}
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.