MongoDB upsert 和 $merge 之间的区别?

Difference between MongoDB upsert and $merge?

在像 SQL 服务器这样的数据库中,对于用户想要插入或更新行为的情况,有合并功能。 Mongo 从 upsert 操作开始就有这种行为(在使用更新命令时通过将 upsert 选项设置为 true 来启用 - 使用 $set)。问题是 Mongo 在 4.2 版中添加了 $merge 操作。我看到它与聚合管道添加有关,在我看来这相当于在 SQL 中创建一个带有自定义条件的合并语句。如果是,那么两者有什么区别?

类似于标语“aggregate() is the new find()”,我们现在有“aggregate() is the new update()”。原始的 update() 函数是一种高效且方便的方法,可以使用常量且相对简单的更新表达式来更新一条或多条记录。 update() 的管道版本通过启用管道功能允许更大的灵活性。但是 aggregate/$merge——尤其是在版本 >=4.4 上,目标集合可以与输入相同——提供了最大程度的灵活性。