• Mongodb基本的查询操作


         MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

      关于mongodb的安装过程,网上已有很多资料,这里不再多说,在此记录一下我遇到过的mongodb的用法,以备日后翻阅。

    一、基础操作。

      1、连接到mongodb数据库

    mongo #在命令行直接进入mongodb
    mongo 127.0.0.1 #连接到ip为127.0.0.1的mongodb
    mongo 127.0.0.1 27017 #连接到ip为127.0.0.1的mongodb
    mongo --port 27017 --host 127.0.0.1

      连接成功后,会出现如下结果,默认连接到mongodb一个名为test的测试数据库

    MongoDB shell version: 2.6.0
    connecting to: 127.0.0.1:27017/test

      2、基本的系统操作,在mongodb里,db为数据库,collection为一个集合,相当于关系型数据库中的table

    show dbs #查看当前所有的数据库
    user xx #选中名为xx的数据库
    db #查看当前选中数据库的信息
    show collections #查看当前数据库下所有的collections

    二、常用的查询操作。

      在mongodb里,所有的操作均以db 命令开头,后面跟着对应操作的collection

      1、创建数据库,如果现在要创建一个名为example的数据库,可以使用 use example的命令

    use example
    switched to db example

      注意,现在数据库还没有真正的创建,使用show dbs命令是无法看到example的,这是因为目前example数据库内还没有任何集合(collection),没有任何数据,只有等创建collection插入数据后,数据库才会被创建。

      接下来创建一个名为users的collection,然后插入数据,完成后,example数据库才算是真正的创建成功,使用show dbs可以看到。

    db.users.insert({'name':'john'})
    WriteResult({ "nInserted" : 1 })

      在创建成功后,系统会默认创建一个system_indexs的集合(系统索引),在example数据库使用show collections命令即可看到。

      对collection的一些操作,同传统关系型数据库一样,可以对mongodb里面的数据按照各种查询,包括等于、大于、小于、包含、不包含 等,按照字段进行排序等。

    db.users.find() #查询所有数据
    db.users.find({'name':'john'}) #查询所有name为john的数据,里面可以使用任意条件
    db.users.findOne() #查询一条数据
    db.users.findOne({'age':'18'}) #使用条件查询一条数据
    db.users.find({'age':'18'}).limit(1) #使用条件查询一条数据
    db.users.find().sort({'name':1}) #对查询结果按照name字段正序排序
    db.users.find().sort({'name':-1}) #对查询结果按照name字段倒序排序
    db.users.find({'name':{$gt:'jack'}}) #查询name字段大于jack的数据

      还可以使用in或者or查询

    db.users.find({'name':{'$in':['john','jack']}}) #查询name为jack 或者john的数据
    db.users.find({'name':{'$or':['john','jack']}})
    db.users.find({'name':{'$ne':'john'}}) #查询name不为john的数据

      在不需要查询所有字段的时候,可以查询某些指定的字段,或者过滤某些指定的字段。

    db.users.find() #默认情况下是返回所有数据的db.users.find({},{'name':0}) #在返回结果中过滤掉name字段db.users.find({},{'name':1}) #在返回结果中只保留字段(注:_id字段是默认显示的,即使设置了其他字段为1的情况,_id字段也会显示)
    { "_id" : ObjectId("53a53e40698c51ca0490f30e"), "name" : "john" }
    { "_id" : ObjectId("53a53f84698c51ca0490f30f"), "name" : "jack" }
    db.users.find({},{'name':1,'_id':0}) #在返回结果中只保留name字段,并且过滤掉_id字段
    { "name" : "john" }
    { "name" : "jack" }

     三、其他操作(删除修改等,以后再说吧,因为是做的日志分析,暂时没这些需求,主要是查询,:) 如果有了以后再说吧)

      附:mongodb与关系型数据库的CRUD对照表 Mongodb的基本查询操作

      

         

    作者:北羽
    出处:http://www.cnblogs.com/whynever
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
    如有问题,可以通过418537487@qq.com 联系我,非常感谢。

  • 相关阅读:
    python和搜索
    Flask---ajax(jquery)交互
    Flask--修改默认的static文件夹的方法
    Flask设计带认证token的RESTful API接口[翻译]
    Python 和 Flask实现RESTful services
    等差数列偶数被除2删除后的恢复问题(2018小马智行秋招计算机视觉第三道编程题)
    Leetcode 140 单词拆分II: 字符串s在字典wordDict中有多少种拆分方法。
    LeetCode 139 单词拆分:字符串s能否分割为字符串数组words(wordDict)中字符串的组合?(某未来公司面试题目)
    ROS时间概念总结:ros::Time、ros::Duration、定时器ros::Timer&ros::Rate
    ++i、i++、i+=1、i=i+1的区别
  • 原文地址:https://www.cnblogs.com/whynever/p/3801150.html
Copyright © 2020-2023  润新知