Mongodb 多层次过滤数据
Mongodb filter data on multiple levels
我有一个员工集合,其中包含员工数据和一些具有开始和结束时间的事件...
我想查询数据,以便根据事件的开始和结束获取特定员工事件的子集。
employees = [
{
_id: 5,
events: [
{
start:5,
end:10
},
{
start:15,
end:20
},
{
start:21,
end:26
},
]
},
{
_id: 6,
events: [
{
start:3,
end:10
},
{
start:15,
end:22
},
{
start:23,
end:26
},
]
}
]
想要的结果:
对于 _id 为 z 的员工,开始大于 x 且结束小于 y 的事件列表。
目前我正在尝试:
db.employees.aggregate([
{ $match: {'_id': 5}},
{ $unwind: '$events'},
{ $match: {'events.start': 2}
]);
但我仍然无法使用 $gt/$lt 过滤子集。
这会起作用
db.collection.aggregate([
{
$match: {
"_id": 5,
},
},
{
$unwind: "$events"
},
{
$match: {
"events.start": {
$gte: 15
},
"events.end": {
$lte: 250
}
}
}
])
我有一个员工集合,其中包含员工数据和一些具有开始和结束时间的事件... 我想查询数据,以便根据事件的开始和结束获取特定员工事件的子集。
employees = [
{
_id: 5,
events: [
{
start:5,
end:10
},
{
start:15,
end:20
},
{
start:21,
end:26
},
]
},
{
_id: 6,
events: [
{
start:3,
end:10
},
{
start:15,
end:22
},
{
start:23,
end:26
},
]
}
]
想要的结果: 对于 _id 为 z 的员工,开始大于 x 且结束小于 y 的事件列表。
目前我正在尝试:
db.employees.aggregate([
{ $match: {'_id': 5}},
{ $unwind: '$events'},
{ $match: {'events.start': 2}
]);
但我仍然无法使用 $gt/$lt 过滤子集。
这会起作用
db.collection.aggregate([
{
$match: {
"_id": 5,
},
},
{
$unwind: "$events"
},
{
$match: {
"events.start": {
$gte: 15
},
"events.end": {
$lte: 250
}
}
}
])