mongodb получить индекс элемента массива из другого массива - PullRequest
0 голосов
/ 30 мая 2018

Если документы в коллекции:

{array1: ["a", "b", "c"]},
{array2: ["c", "a", "b"]}

Я хочу найти индекс "элемента массива 2" в массиве 1 в конвейере агрегации, выходные данные должны быть как [2, 0, 1], поскольку индекс первого элемента в массиве 2 равен "c", а индекс "c" в массиве 1 равен 2.

Первоначальное использование indexOfArray:

{$indexOfArray: [ "$array", "a" ] }

где «а» является указанным значением, есть ли способ найти индекс элемента, а элемент из другого массива в той же коллекции?

что-то вроде

{$indexOfArray: [ "$array1", "every item in array2" ] }

1 Ответ

0 голосов
/ 30 мая 2018

Мы могли бы использовать 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)}

Вы можете указать условия фильтра в операции поиска, чтобы ограничить число строк, подходящих для текущей операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...