定义
返回跨群组中的文档计算的表达式的唯一值大量。大量中元素的顺序未指定。
$addToSet 可在以下阶段使用:
注意
消歧
本页描述了用作累加器时的 $addToSet。累加器返回单个聚合值,例如一群组输入文档的总和、最大值或最小值。
您还可以在其他上下文中使用 $addToSet:
$addToSet (window function),用于在$setWindowFields阶段返回特定窗口中文档的唯一值大量。$addToSet (update operator),这会将唯一元素添加到文档中的大量字段中。
语法
{ $addToSet: <expression> }
有关表达式的更多信息,请参阅表达式。
行为
如果表达式的值是一个大量,$addToSet 会将整个大量作为单个元素追加。
如果该表达式的值为一个文档,则当数组中的另一文档与要添加的文档完全匹配时,MongoDB 便确定该文档为重复文档。具体而言,现有文档包含顺序完全相同的相同字段和值。
例子
本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
以下操作按导演对电影进行分组,并使用 $addToSet累加器收集每位导演拍摄过的独特类型。为了提高可读性,管道将结果限制为按字母顺序排列的前五位导演。
db.movies.aggregate( [ { $unwind: "$directors" }, { $unwind: "$genres" }, { $group: { _id: "$directors", genres: { $addToSet: "$genres" } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
此管道返回以下结果:
[ { _id: 'A. Dean Bell', genres: [ 'Crime', 'Drama' ] }, { _id: 'A. Karunakaran', genres: [ 'Romance' ] }, { _id: 'A. Vanichkin', genres: [ 'Animation', 'Fantasy' ] }, { _id: 'A.J. Edwards', genres: [ 'Biography', 'Drama', 'History' ] }, { _id: 'A.R. Murugadoss', genres: [ 'Drama', 'Sci-Fi', 'Thriller', 'Action', 'Mystery' ] } ]