美文网首页mongodb基础操作
mongodb Aggregation聚合操作之$out

mongodb Aggregation聚合操作之$out

作者: 蚁族的乐土 | 来源:发表于2021-03-14 21:14 被阅读0次

    在上一篇 mongodb Aggregation聚合操作之$replaceRoo中详细介绍了mongodb聚合操作中的$replaceRoot使用以及参数细节。本篇将开始介绍Aggregation聚合操作中的$out操作。

    说明:

    获取聚合管道返回的文档,并将其写入指定的集合。$out操作符必须是管道中的最后一个阶段。

    版本3.2.0中的变化:MongoDB 3.2增加了对文档验证的支持。bypassDocumentValidation字段允许您在聚合操作的$out阶段绕过文档验证。这允许插入不满足验证要求的文档。将bypassDocumentValidation指定为聚合方法或命令的选项。

    语法:

    { $out: "<output-collection>" }

    注意:不能将分片集合指定为输出集合。可以对管道的输入集合进行切分。$out操作符不能将结果写入有上限的集合。如果当前数据库中还不存在一个集合,则$out操作将在该数据库中创建一个新的集合。在聚合完成之前,集合是不可见的。如果聚合失败,MongoDB不会创建集合。如果$out操作指定的集合已经存在,则在完成聚合后,$out stage将自动用新的结果集合替换现有集合,具体步骤分为以下四步:

    1.创建一个临时集合。

    2.将索引从现有集合复制到临时集合。

    3.将文档插入到临时集合中。

    4.调用db.collection.renameCollection使用dropTarget的renameCollection: true将临时集合重命名为目标集合。

    $out操作不会更改前一个集合上存在的任何索引。如果聚合失败,则$out操作不会对预先存在的集合进行更改。指数的约束如果管道生成的文档违反了任何唯一索引(包括原始输出集合的_id字段上的索引),则管道将无法完成。

    1. 示例

    初始化数据:

    db.outExample.insertMany([{ "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 },

    { "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 },

    { "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 },

    { "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 },

    { "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }])

    示例:根据author字段分组后,把结果写到authors集合中

    db.outExample.aggregate( [

                          { $group : { _id : "$author", books: { $push: "$title" } } },

                          { $out : "authors" }

                      ] )

    查看authors集合获得结果:

    {

        "_id" : "Homer",

        "books" : [

            "The Odyssey",

            "Iliad"

        ]

    }

    {

        "_id" : "Dante",

        "books" : [

            "The Banquet",

            "Divine Comedy",

            "Eclogues"

        ]

    }

    相关文章

      网友评论

        本文标题:mongodb Aggregation聚合操作之$out

        本文链接:https://www.haomeiwen.com/subject/hiuccltx.html