Introduction to MongoDB $setEquals Operator

$setEquals is a set operator in MongoDB that can be used to compare whether two sets are equal. It returns true if the two sets are equal and false otherwise. The operator takes two parameters, which are the two sets to be compared. If either parameter is not an array or an empty array, false will be returned.

Syntax

{ $setEquals: [ <array1>, <array2> ] }

<array1> and <array2> are the two sets to be compared.

Use Cases

The $setEquals operator is commonly used to compare whether two sets are equal. In MongoDB, collections are often stored as arrays. This operator can be used to easily check if two sets are exactly the same. For example, it can be used to check if two users have the same permissions or if two shopping carts are identical.

Examples

Sample Data

Suppose we have a users collection that stores information about multiple users. Each user has a favorites field that stores their list of favorites. We can use the $setEquals operator to check if two users have the same list of favorites. Here is an example of the data:

{
  "_id": 1,
  "name": "Alice",
  "favorites": [ "apple", "banana", "orange" ]
},
{
  "_id": 2,
  "name": "Bob",
  "favorites": [ "apple", "orange", "banana" ]
},
{
  "_id": 3,
  "name": "Charlie",
  "favorites": [ "apple", "banana", "orange", "peach" ]
}

Sample Query

The following query uses the $setEquals operator to compare whether Alice and Bob have the same list of favorites:

db.users.aggregate([
  {
    $match: {
      name: { $in: ["Alice", "Bob"] }
    }
  },
  {
    $group: {
      _id: null,
      favorites: { $addToSet: "$favorites" }
    }
  },
  {
    $project: {
      result: { $setEquals: ["$favorites"] }
    }
  }
])

Sample Result

The result of the query is:

{ "_id": null, "result": false }

Because Alice and Bob do not have exactly the same list of favorites, the result is false.

Conclusion

The $setEquals operator can be used to easily compare whether two sets are equal. Using this operator, it is easy to check whether two sets are exactly the same and avoid manually comparing each element.