$setIsSubset (aggregation)

Definition

  • $setIsSubset

New in version 2.6.

Takes two arrays and returns true when the first array is asubset of the second, including when the first array equals thesecond array, and false otherwise.

$setIsSubset has the following syntax:

  1. { $setIsSubset: [ <expression1>, <expression2> ] }

The arguments can be any valid expression as long as they each resolve to an array.For more information on expressions, seeExpressions.

Behavior

$setIsSubset performs set operation on arrays, treating arraysas sets. If an array contains duplicate entries, $setIsSubsetignores the duplicate entries. $setIsSubset ignores the order ofthe elements.

If a set contains a nested array element, $setIsSubset does not descendinto the nested array but evaluates the array at top-level.

ExampleResult
  1. { $setIsSubset: [ [ "a", "b", "a" ], [ "b", "a" ] ] }
true
  1. { $setIsSubset: [ [ "a", "b" ], [ [ "a", "b" ] ] ] }
false

Example

Consider an experiments collection with the following documents:

  1. { "_id" : 1, "A" : [ "red", "blue" ], "B" : [ "red", "blue" ] }
  2. { "_id" : 2, "A" : [ "red", "blue" ], "B" : [ "blue", "red", "blue" ] }
  3. { "_id" : 3, "A" : [ "red", "blue" ], "B" : [ "red", "blue", "green" ] }
  4. { "_id" : 4, "A" : [ "red", "blue" ], "B" : [ "green", "red" ] }
  5. { "_id" : 5, "A" : [ "red", "blue" ], "B" : [ ] }
  6. { "_id" : 6, "A" : [ "red", "blue" ], "B" : [ [ "red" ], [ "blue" ] ] }
  7. { "_id" : 7, "A" : [ "red", "blue" ], "B" : [ [ "red", "blue" ] ] }
  8. { "_id" : 8, "A" : [ ], "B" : [ ] }
  9. { "_id" : 9, "A" : [ ], "B" : [ "red" ] }

The following operation uses the $setIsSubset operator todetermine if the A array is a subset of the Barray:

  1. db.experiments.aggregate(
  2. [
  3. { $project: { A:1, B: 1, AisSubset: { $setIsSubset: [ "$A", "$B" ] }, _id:0 } }
  4. ]
  5. )

The operation returns the following results:

  1. { "A" : [ "red", "blue" ], "B" : [ "red", "blue" ], "AisSubset" : true }
  2. { "A" : [ "red", "blue" ], "B" : [ "blue", "red", "blue" ], "AisSubset" : true }
  3. { "A" : [ "red", "blue" ], "B" : [ "red", "blue", "green" ], "AisSubset" : true }
  4. { "A" : [ "red", "blue" ], "B" : [ "green", "red" ], "AisSubset" : false }
  5. { "A" : [ "red", "blue" ], "B" : [ ], "AisSubset" : false }
  6. { "A" : [ "red", "blue" ], "B" : [ [ "red" ], [ "blue" ] ], "AisSubset" : false }
  7. { "A" : [ "red", "blue" ], "B" : [ [ "red", "blue" ] ], "AisSubset" : false }
  8. { "A" : [ ], "B" : [ ], "AisSubset" : true }
  9. { "A" : [ ], "B" : [ "red" ], "AisSubset" : true }