Từ phiên bản 3.2, bạn có thể làm điều đó với $unwind trên cả hai mảng, $cmp các chỉ mục và $match chỉ các chỉ mục bằng nhau.
Giải pháp này sẽ điền những gì bạn đã viết trong trường hợp bạn chỉ có tài liệu ví dụ. Nếu bạn có nhiều tài liệu hơn, tôi không biết bạn mong đợi nhận được gì ở đầu ra, nhưng nó có thể giải quyết được bằng cách nhóm theo _id của tài liệu.
db.test.aggregate([
{
$unwind: {
path: '$dates',
includeArrayIndex: 'dates_index',
}
},
{
$unwind: {
path: '$numbers',
includeArrayIndex: 'numbers_index',
}
},
{
$project: {
dates: 1,
numbers: 1,
compare: {
$cmp: ['$dates_index', '$numbers_index']
}
}
},
{
$match: {
compare: 0
}
},
{
$project: {
_id: 0,
dates: 1,
numbers: 1
}
}
])