哪个网站做自媒体比较好前端网页设计样例
哪个网站做自媒体比较好,前端网页设计样例,视频网站建设服务,wordpress 的客户端$merge的用途是把聚合管道产生的结果写入指定的集合#xff0c;有时候可以用$merge来做物化视图。需要注意#xff0c;$meger操作必须是聚合管道的最后一个阶段。具体功能有#xff1a;
能够输出到当前或不同的数据库能够输出到正在聚合的集合#xff08;慎重#xff1a;…$merge的用途是把聚合管道产生的结果写入指定的集合有时候可以用$merge来做物化视图。需要注意$meger操作必须是聚合管道的最后一个阶段。具体功能有
能够输出到当前或不同的数据库能够输出到正在聚合的集合慎重可能会导致频繁的更新甚至死循环可以在副本集的二级节点运行前提是群集所有节点的featureCompatibilityVersion不小于4.4且读选项允许二级读取。注意 $merge读取操作会发送到二级节点写入操作只发生在主节点。并非所有版本的驱动都支持$merge在副本集二级节点的操作在使用前要确认驱动支持。 输出集合不存在时可以自动创建输出集合数据库不存在时也可以自动创建输出结果可以与现有集合合并包括插入新文档、合并文档、替换文档、保持已存在的文档、让操作失败、使用自定义的更新管道处理文档等。
语法
{ $merge: {into: collection -or- { db: db, coll: collection },on: identifier field -or- [ identifier field1, ...], // 可选let: variables, // 可选whenMatched: replace|keepExisting|merge|fail|pipeline, // 可选whenNotMatched: insert|discard|fail //可选
} }举例
{ $merge: {into: mycollection, on: _id, whenMatched: replace, whenNotMatched: insert } }如果都使用$merge的默认选项并且输出到当前数据库可以使用简化形式
{ $merge: collection } //输出到当前数据库字段说明
into
输出到的集合可以指定到数据库也可以不指定数据库输出到当前数据库。例如
输出到当前库的my_coll集合into: my_coll
输出到mydb的my_coll集合into:{db:mydb, coll:my_coll}
注意
如果目标库或集合不存在会自动创建如果是共享的群集目标集合必须要存在输出集合也可以是共享集合
on
可选字段可以指定一个或多个字段作为判断文档唯一性的ID用于匹配目标集合中是否已经存在相同ID的文档。
举例
一个字段on: _id多个字段on: [date, name]
注意
如果指定了on字段除非on是_id否则在聚合结果文档中必须存在on中指定的字段如果聚合结果中没有_id字段会自动添加一个。on指定的字段的值不允许为空或数组。$merge必须要有一个包含on字段的唯一索引索引键顺序无关紧要。 索引必须有跟聚合集合同样的集合唯一索引必须是一个稀疏索引唯一索引不能是部分索引对已经存在的输出集合相应的索引必须已经存在 on的缺省值依赖于输出集合 如果输出集合不存在on的标识符必须且缺省为_id字段相应的唯一索引_id是被自动创建的。如果输出集合是已经存在的分片集合on标识符缺省为_id字段如果输出集合是已经存在的非分片集合on标识符缺省为所有分片键值字段和_id字段如果指定了一个不同的on标识符on必须包含所有的分片键值字段。
whenMatched
可选字段指定当输出集合中存在与on字段指定的键值相同的文档时的处理方式可以为以下值
“replace” 替换
使用聚合结果替换已经存在的文档。当执行替换的时候不能修改对应文档_id字段的值如果输出集合是分片集合也不能修改分片键值否则操作会产生错误。为了避免这个错误如果on字段中没有包含_id字段可以从聚合结果中移除_id字段以避免这个错误比如可以使用类似$unset的阶段预先处理以下。
“keepExistin” 保留已存在的
不替换已经存在的文档
“merge 合并
缺省值合并匹配的文档类似于$mergeObjects操作
如果聚合结果文档的字段在目标文档中不存在就添加如果聚合结果文档的字段在目标文档中已存在则替换
举例
如果目标集合有一个文档
{_id: 1, a: 1, b: 1 }聚合结果的文档是
{ _id: 1, b: 5, z: 1 }
则合并后的文档是
{ _id: 1, a: 1, b: 5, z: 1 }跟replace类似合并的时候_id字段或分片键值是不能被修改的。
“fail” 失败
停止并且报错之前所有的输出和更改都不能撤销。
使用聚合管道更新输出集合文档
当on指定的键值相同时使用一个聚合管道更新输出集合的文档如
[ stage1, stage2 ... ]但是管道只能包含下面的阶段
$addFields及其别名$set$projecct及其别名$unset$replaceRoot及其别名$replaceWith
管道不能修改on涉及字段的值比如匹配字段year管道是不能修改year字段值的。另外whenMatched管道可以使用$field直接访问输出文档的字段。如果要在管道中访问聚合结果文档就是输入文档的字段可以使用下面两种方式
使用内置的$$new变量来访问字段就是$$new.field。$$new变量只能在省略let时才能使用。在let字段使用用户自定义的变量。以$$符号为前缀指定变量名$$variable_name如$$year。如果变量是文档也可以包含文档字段格式为$$变量名.字段。例如$$year.month。
let
可选字段为whenMatched的管道指定变量。可以指定文档的变量名和表达式
{ variable_name_1: expression_1,...,variable_name_n: expression_n }whenNotMatch
可选字段决定了$merge在输出文档匹没有配到对应文档的情况可以指定下面的预定义的字符串常量
insert插入缺省值将聚合后的文档插入到输出集合。discard丢弃就是不向输出集合中插入文档。fail失败停止并宣告聚合操作失败之前已经在输出集合中写入或修改的文档不能回滚。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90071.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!