我有一个问题,就是在MongoDB上的数组中过滤一个包含范围的日期。
文件1:
{
"_id": {
"$oid": "61d406681512ba17533b35c9"
},
"items": [{
"_id": {
"$oid": "61d406681512ba17533b35cd"
},
"bookingEnd": {
"$date": "2022-04-22T00:00:00.000Z"
},
"bookingStart": {
"$date": "2022-03-19T00:00:00.000Z"
}
}, {
"_id": {
"$oid": "61d406681512ba17533b35cd"
},
"bookingEnd": {
"$date": "2022-07-22T00:00:00.000Z"
},
"bookingStart": {
"$date": "2022-06-19T00:00:00.000Z"
}
}],
"createdAt": {
"$date": "2022-01-04T08:33:44.958Z"
},
"updatedAt": {
"$date": "2022-01-04T08:33:44.958Z"
},
"__v": 0
}
文件2:
{
"_id": {
"$oid": "61d407c41512ba17533b35f7"
},
"items": [{
"_id": {
"$oid": "61d407c41512ba17533b35fb"
}
"bookingEnd": {
"$date": "2022-05-22T00:00:00.000Z"
},
"bookingStart": {
"$date": "2022-04-19T00:00:00.000Z"
}
}],
"createdAt": {
"$date": "2022-01-04T08:39:32.648Z"
},
"updatedAt": {
"$date": "2022-01-04T08:39:32.648Z"
},
"__v": 0
}
简历:
我有两份文件:
- 文档1(embebed数组上的2个元素(:
- items.0.bookingStart:"2022-03-19T00:00:00.000Z">
- 项目1.bookingStart:;2022-06-19T00:00:00.000Z">
- 文档1(embebed数组上的1个元素(:
- items.0.bookingStart:"2022-04-19T00:00:00.000Z">
Mongo过滤器:
{ 'items.bookingStart': { $gte: ISODate('2022-03-01T00:00:00.000Z'), $lte: ISODate('2022-03-30T00:00:00.000Z') } }
Mongoose过滤器:
async findAll(params: AdminFilterOrderDto) {
const {
bookingStartInitial,
bookingStartFinal,
} = params;
const filter = {
'items.bookingStart': {
$gte: bookingStartInitial,
$lte: bookingStartFinal,
},
};
return await this.orderModel.find(filter);
}
应用的过滤器:
- $gte:";2022-02-01T00:00:00.000Z"$lte:";2022-02-30T000:00:00.000Z";(它没有显示任何好的东西(
- $gte:";2022-03-01T00:00:00.000Z"$lte:";2022-03-30T000:00:00.000Z";(它显示了一份文件。很好(
- $gte:";2022-04-01T00:00:00.000Z"$lte:";2022-04-30T000:00:00.000Z";(它显示两个文档。坏。它应该显示一个文档。(
- $gte:";2022-05-01T00:00:00.000Z"$lte:";2022-05-30T000:00:00.000Z";(它显示一个文档。糟糕。它不应该显示任何内容。(
- $gte:";2022-06-01T00:00:00.000Z"$lte:";2022-06-30T000:00:00.000Z";(它显示了一份文件。很好(
- $gte:";2022-07-01T00:00:00.000Z"$lte:";2022-07-30T000:00:00.000Z";(它没有显示任何东西。很好(
过滤器3和4给出错误的响应。
知道发生了什么事吗?是MongoDB错误还是我执行的查询错误?
谢谢你的帮助!
使用$elemMatch
db.collection.find({
items: {
$elemMatch: {
$and: [
{
"bookingStart": {
$gte: {
"$date": "2022-04-01T00:00:00.000Z"
}
}
},
{
"bookingStart": {
$lte: {
"$date": "2022-04-30T00:00:00.000Z"
}
}
}
]
}
}
})
mongoplayground