mongodb从另一个数组中获取数组项的索引

时间:2018-05-29 23:38:43

标签: arrays mongodb aggregation-framework

如果集合中的文档是:

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

我想在聚合管道的array1中找到“array2元素”的索引,输出应该像[2,0,1],因为array2中第一个元素的索引是“c”, array1中的“c”索引为2。

indexOfArray的最初用法是:

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

其中“a”是指定值,是否有任何方法可以找到项目的索引,该项目来自同一集合中的另一个数组?

类似

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

1 个答案:

答案 0 :(得分:0)

我们可以使用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表示在arr1中找不到相应索引的arr2中的元素。 第二个文档的输出应为[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)}

您可以在查找操作中提供过滤条件,以限制符合当前操作条件的行。