zoukankan      html  css  js  c++  java
  • MongoDB学习记录

    一、操作符

    "$lt"       :"<"
    "$lte" :"<="
    "$gt" :">"
    "$gte" :">="
    "$ne" :"!="
    "$in" :查询匹配指定条件值的文档;
    "$nin" :查询不匹配指定条件值的文档;
    "$or" :或查询

    如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

    
    
    
    操作格式范例RDBMS中的类似语句
    等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
    小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
    小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
    大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
    大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
    不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

     
    MongoDB 查询文档

    二、链式操作

    append方法:尤其适用于日期等区间查询条件。

    三、一些基本操作

    db.createCollection('user');  --创建表
    db.getCollection('user').remove({'_id':1});  --删除记录
    db.getCollection('user').ensureIndex({"email":1});  --新建索引
    db.getCollection('user').insert({  --插入记录        
    "_id" : 1,
    "email" : "xxx@mtime.com",
    "name" : "哈哈",
    "salt" : "5927eb03f6ee9428bc55aa0d",
    "pwd" : "121212",
    "admin" : true,
    "roles" : [

    ],
    "subjects" : [
    1,
    2,
    3,
    4
    ],
    "status" : 1,
    "muser" : 1,
    "mtime" : ISODate("2017-07-10T01:21:19.359Z")
    }
    );

    --修改记录

    db.getCollection('language').update({},{$set:{muser:5,mtime:new Date()}},false,true);
    db.getCollection('language').update({},{$unset:{'modifyTime':''}},false, true); --删除列
    db.getCollection('language_pack').update({},{$set:{modifyUser:5,modifyTime:new Date()}},false,true);

    db.getCollection('activity').update({_id:25}, {$set: {status:2}}, {multi: true});

    创建复合唯一索引

    db.video.createIndex({source_type:1,source:1,video_id:1,key_word:1},{name:'idx_source_type_source_video_id_key_word',unique:true});

    --分组聚合

    管道的概念

    管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

    MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

    表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

    这里我们介绍一下聚合框架中常用的几个操作:

    • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
    • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
    • $limit:用来限制MongoDB聚合管道返回的文档数。
    • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
    • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
    • $group:将集合中的文档分组,可用于统计结果。
    • $sort:将输入文档排序后输出。
    • $geoNear:输出接近某一地理位置的有序文档。
    db.getCollection('video').aggregate([
        { $group: { _id : '$source', count: { $sum : 1 } } },
        { $match: { count: { $gt : 1} } }
    ])

    db.getCollection('video').aggregate([
      {$project:{source : 1, source_type : 1,video_id:1,enter_time:1}},
      {$match: {source:2,enter_time:{"$gte":ISODate('2020-03-22 07:42:58.675') , "$lt":ISODate('2020-05-22 19:00:00.141') },can_capture:{$ne:1}}},
      {$group: { _id: {source : '$source', source_type : '$source_type',video_id:'$video_id'}, count: { $sum: 1 } }},
      {$sort:{video_id:1}},
      {$skip: 0 },
      {$limit: 10 }
    ]);

    注意:$peoject中,1-包含,0-不包含,_id 字段默认为包含

    --查询与删除重复数据

    db.video.aggregate([{
        $group: {
            _id: {
                source: '$source',
                source_type: '$source_type',
                video_id: '$video_id',
                key_word: '$key_word'
            },
            count: {
                $sum: 1
            },
            dups: {
                $addToSet: '$_id'
            }
        }
    }, {
        $match: {
            count: {
                $gt: 1
            }
        }
    }]).forEach(function(doc) {
        doc.dups.shift();
        db.video.remove({
            _id: {
                $in: doc.dups
            }
        });
    })

    按日期分组统计

    {
        "collection": "video",
        "aggregate": [
            {
                "$match": {
                    "enter_time": {
                        "$gte": {
                            "$humanTime": "{{ StartDate }}"
                        },
                        "$lt": {
                            "$humanTime": "{{ EndDate }}"
                        }
                    }
                }
            },
            {
                "$group": {
                    "_id": {
                        "$dateToString": {
                            "format": "%Y-%m-%d",
                            "date": "$enter_time",
                            "timezone": "+0800"
                        }
                    },
                    "count": {
                        "$sum": 1
                    }
                }
            }
        ]
    }

    日期条件查询

    db.video_comment_push_log.find({"source_type":4,"source":4}).sort({"_id":-1}).limit(2);
    
    db.video_comment.find({"source_type":4,"source":4,"enter_time":{"$gte":ISODate('2020-04-22 07:42:58.675') , "$lt":ISODate('2020-04-22 19:00:00.141') }}).count();
    
    db.video_comment.find({"source_type":4,"source":4}).sort({"enter_time":-1}).limit(100);
    
    db.video_comment.count({"source_type":4,"source":4});

    back

    db.video_comment_push_log.find({"source_type":7,"source":2}).sort({"_id":-1}).limit(20);
    
    db.video_comment.find({"source_type":4,"source":4,"enter_time":{"$gte":ISODate('2020-04-22 03:00:00.114') , "$lt":ISODate('2020-04-22 05:00:00.111') }}).count();
    
    db.video_comment.find({"source_type":4,"source":4}).sort({"enter_time":-1}).limit(100);
    
    db.video_comment.count({"source_type":4,"source":4});
    
    db.video_push_log.find({"source_type":71,"source":2}).sort({"_id":-1}).limit(20);
    
    db.video.count({"source_type":4,"source":4,"enter_time":{"$gte":ISODate('2020-04-22 17:00:00.136') , "$lt":ISODate('2020-04-23 06:00:00.098') }});
    
    db.teleplay_episode.count({"source_type":7,"source":2,"enter_time":{"$gte":ISODate('2020-04-21 00:00:00.208') , "$lt":ISODate('2020-04-21 16:00:00.249') }});
    
    db.teleplay_comment.count({"source_type":7,"source":2,"enter_time":{"$gte":ISODate('1970-01-01 00:00:00.001') , "$lt":ISODate('2020-04-22 06:00:00.156') }});

    redash查询mongo

    {
        "collection":"series_top_list",
        "query":{"code":"tengxunshipin"},
        "$sort": [{"name": "ranking","direction": 1}]
    }
    {
        "collection":"risk_score",
        "aggregate":[
                {"$group":{"_id":"$udid", "count":{"$sum":1}}},
                {"$match":{"count":{"$gt":1}}},
                {"$sort": [{"name": "count","direction": -1}]}
        ]
    }

    安装部署(windows)

    注意:使用的时候 请先在服务管理中 启动  MongoDB Server

    常用命令行操作

    1、显示当前数据库服务上的数据库

    show dbs;

    2、切换到指定的数据库进行操作

    use mydb

    3、显示当前数据库的所有集合(collections)

    show collections;

    4、查看数据库服务的状态

    db.serverStatus();

    5、查询指定数据库的统计信息

    use admin

    db.stat()

    6、查询指定数据库包含的集合名称列表

    use test1

    db.getCollectionNames()

    7、统计集合记录数

    db.test1.count()

    8、统计指定条件的记录数

    db.test1.find({"name":"yunweicai"}).count()

    9、查询指定数据库的集合当前可用的存储空间

    db.test1.storageSize()

    10、查询指定数据库的集合分配的存储空间

    db.test1.totalSize()

    参考资料:

    MongoDB教程

    mongoDB document

    MongoDB 入门

    mongodb_查询操作使用_条件查询、where子句等

    MongoDB学习笔记(查询)

    MongoDB 查询文档

    MongoDB 排序

    MongoDB 聚合

    MongoDB学习笔记-数据格式及数据类型

    mongodb 格式化时间

    Mongodb聚合框架Aggregate - 时间戳转时间聚合分组统计实现

    mongoDB——java操作mongodb文档

    mongodb-java-driver基本用法

    MongoDB Java Driver

    Mongo中append方法使用

    学习MongoDB-应用举例(利用java操作MongoDB)

    NoSQL 之 Morphia 操作 MongoDB

    MongoDB 创建索引的语法

    MongoDB查询和去除重复数据

    MongoDB查询大于某个时间,小于某个时间,在某一段时间范围

    mongoTemplate.aggregate()聚合查询

    mongoTemplate.aggregate() 聚合查询,关联查询

    mongoTemplate 聚合分组统计,aggregate分页

    MongoDB批量更新和批量插入的方式

    mongoDB-Criteria 

    mongo使用小记0之Query和Criteria查询语句

    关于mongoDB使用java实现高级查询query参数的组装

    MongoTemplate复合条件查询

    mongodb命令行操作

    MongoDB-命令行基本操作

    mongodb用户权限管理最全攻略:用户的创建、查看、删除与修改,mongodb入坑之旅

  • 相关阅读:
    git Permissions 0777 for '/home/xxx/.ssh/id_rsa' are too open.
    Linux wc指令解析
    RK3288 开机动画旋转
    tp3.2 事务
    PHP实现动态获取函数参数的方法
    laravel 配置设置
    swoole 使用异步redis的前置条件
    php回调函数的概念及实例
    swoole 安装
    linux 源码安装PHP
  • 原文地址:https://www.cnblogs.com/wangwangfei/p/6129110.html
Copyright © 2011-2022 走看看