Мы могли бы использовать javascript вместо агрегирования.Предположим, что коллекция TestArray имеет следующие два документа.
{ "arr1" : [ "a", "b", "c" ], "arr2" : [ "c", "a", "b" , "x","y" ] }
{ "arr1" : [ "a", "b", "c" ], "arr2" : [ "c", "a", "b" ] }
Выходные данные для первого документа должны быть [2, 0, 1, -1, -1], где -1 представляетэлементы в arr2 по соответствующему индексу не были найдены в arr1.Выходные данные для второго документа должны быть [2, 0, 1].Приведенный ниже код даст результат.
db.TestArray.find({}).forEach(function(obj){var arr = [] ; src = obj.arr2 ; des = obj.arr1 ; for(var i=0 ; i<src.length ; i++){arr.push(des.indexOf(src[i]));};printjson(arr)}
Вы можете указать условия фильтра в операции поиска, чтобы ограничить число строк, подходящих для текущей операции.