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
}
}
])