• Mongodb 特殊索引和集合 学习笔记


      固定集合(适用于记录日志)

            固定集合需要事先创建好,而且它的大小是固定的.当固定集合被占满时,如果再插入新文档,固定集合会自动将最老的文档从集合中删除。

            固定集合的文档数量不能超过文档数量限制,固定集合的大小也不能超过大小限制。已首先到达限制为准。

            创建固定集合

                db.createCollection(" my_collection", {" capped" : true, "size" : 100000,'max':100});

                capped :固定集合

                my_collection :集合名词

                size : 集合大小

                max :文档数量

            将普通集合转换为固定集合

                db.runCommand({" convertToCapped" : "test", "size" : 10000});

            不能将固定集合转换成普通集合

            自然排序

                对固定集合可以进行一种特殊的排序,称为自然排序(naturalsort)。自然排序返回结果集中文档的顺序就是文档在磁盘上的顺序。

                自然排序得到的文档是从旧到新排列的。当然也可以按照从新到旧的顺序排列

                db.my_collection.find(). sort({" $ natural" : -1})

            循环游标

                循环游标(tailablecursor)是一种特殊的游标,当循环游标的结果集被取光后,游标不会被关闭。循环游标的灵感来自tail-f命令(循环游标跟这个命令有点儿相似),会尽可能久地持续提取输出结果。由于循环游标在结果集取光之后不会被关闭,因此,当有新文档插入到集合中时,循环游标会继续取到结果。由于普通集合并不维护文档的插入顺序,所以循环游标只能用在固定集合上。

               

            TTL索引-具有生命周期的索引

                创建TTL索引

                    db.foo.ensureIndex({" lastUpdated" : 1}, {" expireAfterSecs" : 60* 60* 24})

                    这样就在"lastUpdated"字段上建立了一个TTL索引。如果一个文档的"lastUpdated"字段存在并且它的值是日期类型,当服务器时间比文档的"lastUpdated"字段的时间晚expireAfterSecs秒时,文档就会被删除。

                    MongoDB每分钟对TTL索引进行一次清理,所以不应该依赖以秒为单位的时间保证索引的存活状态。可以使用collMod命令修改expireAfterSecs的值:

                    db.runCommand({" collMod" : "someapp.cache", "expireAfterSecs" : 3600})

                    TTL索引不能是复合索引,但是可以像“普通”索引一样用来优化排序和查询。

               

        地理空间索引

            2dsphere

                允许使用GeoJSON格式指定点、线和多边形。

                    点可以用形如[longitude,latitude]([经度,纬度])的两个元素的数组表示:

                        { "name" : "New York City", "loc" : { "type" : "Point", "coordinates" : [50, 2] } }

                    线可以用一个由点组成的数组来表示:

                        { "name" : "Hudson River", "loc" : { "type" : "Line", "coordinates" : [[ 0,1], [0,2], [1,2]] } }

                    多边形的表示方式与线一样(都是一个由点组成的数组),但是"type"不同:

                        { "name" : "New England", "loc" : { "type" : "Polygon", "coordinates" : [[ 0,1], [0,2], [1,2]] } }

                创建索引

                    db.world.ensureIndex({" loc" : "2dsphere"})

                交集查询 $geoIntersects

                    var eastVillage = { ... "type" : "Polygon", ... "coordinates" : [ ... [-73.9917900, 40.7264100], ... [-73.9917900, 40.7321400], ... [-73.9829300, 40.7321400], ... [-73.9829300, 40.7264100] ... ]}

                    db.map.find({"loc" : {" $geoIntersects" : {"$geometry" : eastVillage}}})

                包含查询 $within

                    db.map.find({"loc" : {"$within" : {"$geometry" : eastVillage}}})

                附近查询 $near

                    db.map.find({"loc" : {" $near" : {" $geometry" : eastVillage}}})

            2D索引

                对于非球面地图(游戏地图、时间连续的数据等)。只能对点进行索引。

                    数据类型[22,22]坐标

                创建索引

                    db.world.ensureIndex({" tile" : "2d"})

                包含查询 $near

                    db.world.find({" tile" : {" $ near" : [20, 21]}})

                附近查询 $within $box表示矩形

                    db.hyrule.find({" tile" : {" $ within" : {" $ box" : [[ 10, 20], [15, 30]]}}})

  • 相关阅读:
    libcurl返回常见错误码
    NSIS控制面板中显示安装包的大小和禁止多个安装程序实例
    NSIS+Duilib 制作Windows安装包
    给自己的程序添加BugReport
    使用Http协议Post上传文件
    tp剩余未验证内容-2
    tp剩余未验证内容
    再谈 tp的 实例化 类 的自动加载
    tp框架中的一些疑点知识-8
    tp框架中的一些疑点知识--cookie和session的配置
  • 原文地址:https://www.cnblogs.com/qy-brother/p/7001099.html
Copyright © 2020-2023  润新知