On this page本页内容
$setIntersection
Takes two or more arrays and returns an array that contains the elements that appear in every input array.接受两个或多个数组,并返回一个数组,该数组包含出现在每个输入数组中的元素。
$setIntersection
has the following syntax:语法如下:
{ $setIntersection: [ <array1>, <array2>, ... ] }
The arguments can be any valid expression as long as they each resolve to an array. 参数可以是任何有效的表达式,只要它们各自解析为一个数组。For more information on expressions, see Expressions.有关表达式的详细信息,请参阅表达式。
$setIntersection
performs set operation on arrays, treating arrays as sets. 对数组执行集合操作,将数组视为集合。If an array contains duplicate entries, 如果数组包含重复条目,$setIntersection
ignores the duplicate entries. $setIntersection
将忽略重复条目。$setIntersection
ignores the order of the elements.忽略元素的顺序。
$setIntersection
filters out duplicates in its result to output an array that contain only unique entries. 筛选出结果中的重复项,以输出仅包含唯一条目的数组。The order of the elements in the output array is unspecified.输出数组中元素的顺序未指定。
If no intersections are found (i.e. the input arrays contain no common elements), 如果没有找到交集(即输入数组不包含公共元素),$setIntersection
returns an empty array.$setIntersection
将返回一个空数组。
If a set contains a nested array element, 如果集合包含嵌套数组元素,$setIntersection
does not descend into the nested array but evaluates the array at top-level.$setIntersection
不会下降到嵌套数组中,而是在顶层计算数组。
Example | Result |
---|---|
{ $setIntersection: [ [ "a", "b", "a" ], [ "b", "a" ] ] } | [ "b", "a" ] |
{ $setIntersection: [ [ "a", "b" ], [ [ "a", "b" ] ] ] } | [ ] |
Consider an 考虑一个包含以下文档的experiments
collection with the following documents:experiments
集合:
{ "_id" : 1, "A" : [ "red", "blue" ], "B" : [ "red", "blue" ] } { "_id" : 2, "A" : [ "red", "blue" ], "B" : [ "blue", "red", "blue" ] } { "_id" : 3, "A" : [ "red", "blue" ], "B" : [ "red", "blue", "green" ] } { "_id" : 4, "A" : [ "red", "blue" ], "B" : [ "green", "red" ] } { "_id" : 5, "A" : [ "red", "blue" ], "B" : [ ] } { "_id" : 6, "A" : [ "red", "blue" ], "B" : [ [ "red" ], [ "blue" ] ] } { "_id" : 7, "A" : [ "red", "blue" ], "B" : [ [ "red", "blue" ] ] } { "_id" : 8, "A" : [ ], "B" : [ ] } { "_id" : 9, "A" : [ ], "B" : [ "red" ] }
The following operation uses the 以下操作使用$setIntersection
operator to return an array of elements common to both the A
array and the B
array:$setIntersection
运算符返回A
数组和B
数组共有的元素数组:
db.experiments.aggregate( [ { $project: { A: 1, B: 1, commonToBoth: { $setIntersection: [ "$A", "$B" ] }, _id: 0 } } ] )
The operation returns the following results:该操作返回以下结果:
{ "A" : [ "red", "blue" ], "B" : [ "red", "blue" ], "commonToBoth" : [ "blue", "red" ] } { "A" : [ "red", "blue" ], "B" : [ "blue", "red", "blue" ], "commonToBoth" : [ "blue", "red" ] } { "A" : [ "red", "blue" ], "B" : [ "red", "blue", "green" ], "commonToBoth" : [ "blue", "red" ] } { "A" : [ "red", "blue" ], "B" : [ "green", "red" ], "commonToBoth" : [ "red" ] } { "A" : [ "red", "blue" ], "B" : [ ], "commonToBoth" : [ ] } { "A" : [ "red", "blue" ], "B" : [ [ "red" ], [ "blue" ] ], "commonToBoth" : [ ] } { "A" : [ "red", "blue" ], "B" : [ [ "red", "blue" ] ], "commonToBoth" : [ ] } { "A" : [ ], "B" : [ ], "commonToBoth" : [ ] } { "A" : [ ], "B" : [ "red" ], "commonToBoth" : [ ] }