定义
返回群组中文档的唯一 表达式 值数组。数组中元素的顺序未指定。
$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' ] } ]