• Linux系统下MongoDB的简单安装与基本操作


     

    这篇文章主要介绍了Linux系统下MongoDB的简单安装与基本操作,需要的朋友可以参考下
     

    Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。

    一、下载mongodb

    前往mongodb官网下载页面:https://www.mongodb.org/downloads下载相应的版本,比如目前的Linux x64位最新版:mongodb-linux-x86_64-2.6.4.tgz

    不过有点坑爹是,下载链接明明是tgz格式,结果下载后变成了gz格式:

    mongodb1

    先下载看看好了。

    二、解压mongodb

    1
    [root@test6 ~]# gzip -d mongodb-linux-x86_64-2.6.4.gz

    得到的是mongodb-linux-x86_64-2.6.4,居然是个文件,而不是文件夹,和网上说的大相径庭:


    mongodb2

    看来前面下载的确实存在问题!实际上应该是tgz文件才对,按经验分析了一下,下载的实际上还是tgz文件,显示为gz文件只是形式上的假象!所以,gzip只解压了压缩包的外层,实际上还需要解压一层tar存档属性!

    于是,先将解压后的文件重命名加上tar格式:

    1
    [root@test6 ~]# mv mongodb-linux-x86_64-2.6.4 mongodb-linux-x86_64-2.6.4.tar

    然后,使用tar解压即可:

    1
    [root@test6 ~]# tar xvf mongodb-linux-x86_64-2.6.4.tar

    将解压后的文件夹移动&重命名至/usr/local/mongodb

    1
    2
    3
    [root@test6 ~]# mv mongodb-linux-x86_64-2.6.4 /usr/local/mongodb
    [root@test6 ~]# cd /usr/local/mongodb/bin/
    [root@test6 ~]# ll

    bin下的mongod就是MongoDB的服务端进程,mongo就是其客户端,其它的命令用于MongoDB的其它用途如MongoDB文件导出等。

    三、启动mongodb
    启动前,先指定mongodb的data目录,如果没有就创建一个:

    1
    2
    [root@test6 ~]# cd /usr/local/mongodb
    [root@test6 mongodb]# mkdir data

    然后,执行如下命令即可启动mongodb:

    1
    [root@test6 mongodb]# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/data/mongodb.log --logappend&

    mongodb5

    启动成功后,可查看是否启动成功了,默认端口号是27017,当然在启动时也可以指定未使用的其它端口。

    mongodb6

    最后,将客户端mogo文件在/bin下软链接,方便随处执行:

    1
    ln -s /usr/local/mongodb/bin/mongo /bin/mongo

    现在使用mongo客户端访问一下该数据库:

    1
    2
    3
    4
    [root@test6 bin]# ./mongo
    MongoDB shell version: 2.6.4
    connecting to: test
    >

    安装成功!

    四、附:基本操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    MongoDB数据库基本用法
     
    show dbs:显示数据库列表
    show collections:显示当前数据库中的集合(类似关系数据库中的表)
    show users:显示用户
    use <db name>:切换当前数据库,这和MS-SQL里面的意思一样
    db.help():显示数据库操作命令,里面有很多的命令
    db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
    db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
    db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
    MongoDB没有创建数据库的命令,但有类似的命令。
    如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。
    数据库常用命令
     
    1、Help查看命令提示
     help
     db.help();
     db.yourColl.help();
     db.youColl.find().help();
     rs.help();
    2、切换/创建数据库
     use yourDB; 当创建一个集合(table)的时候会自动创建当前数据库
    3、查询所有数据库
     show dbs;
    4、删除当前使用数据库
     db.dropDatabase();
    5、从指定主机上克隆数据库
     db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库
    6、从指定的机器上复制指定数据库数据到某个数据库
     db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
    7、修复当前数据库
     db.repairDatabase();
    8、查看当前使用的数据库
     db.getName();
     db; db和getName方法是一样的效果,都可以查询当前使用的数据库
    9、显示当前db状态
     db.stats();
    10、当前db版本
     db.version();
    11、查看当前db的链接机器地址
     db.getMongo();
     
    Collection聚集集合
     
    1、创建一个聚集集合(table
     db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
    2、得到指定名称的聚集集合(table
     db.getCollection("account");
    3、得到当前db的所有聚集集合
     db.getCollectionNames();
    4、显示当前db所有聚集索引的状态
     db.printCollectionStats();
     
    用户相关
     
    1、添加一个用户
     db.addUser("name");
     db.addUser("userName", "pwd123", true); 添加用户、设置密码、是否只读
    2、数据库认证、安全模式
     db.auth("userName", "123123");
    3、显示当前所有用户
     show users;
    4、删除用户
     db.removeUser("userName");
     
    其他
     
    1、查询之前的错误信息
     db.getPrevError();
    2、清除错误记录
     db.resetError();
      
    查看聚集集合基本信息
     
    1、查看帮助 db.yourColl.help();
    2、查询当前集合的数据条数 db.yourColl.count();
    3、查看数据空间大小 db.userInfo.dataSize();
    4、得到当前聚集集合所在的db db.userInfo.getDB();
    5、得到当前聚集的状态 db.userInfo.stats();
    6、得到聚集集合总大小 db.userInfo.totalSize();
    7、聚集集合储存空间大小 db.userInfo.storageSize();
    8、Shard版本信息 db.userInfo.getShardVersion()
    9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users
    10、删除当前聚集集合 db.userInfo.drop();
     
    聚集集合查询
     
    1、查询所有记录
    db.userInfo.find();
    相当于:select* from userInfo;
    默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
    但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。
      
    2、查询去掉后的当前聚集集合中的某列的重复数据
    db.userInfo.distinct("name");
    会过滤掉name中的相同数据
    相当于:select distict name from userInfo;
      
    3、查询age = 22的记录
    db.userInfo.find({"age": 22});
    相当于: select * from userInfo where age = 22;
      
    4、查询age > 22的记录
    db.userInfo.find({age: {$gt: 22}});
    相当于:select * from userInfo where age >22;
      
    5、查询age < 22的记录
    db.userInfo.find({age: {$lt: 22}});
    相当于:select * from userInfo where age <22;
      
    6、查询age >= 25的记录
    db.userInfo.find({age: {$gte: 25}});
    相当于:select * from userInfo where age >= 25;
      
    7、查询age <= 25的记录
    db.userInfo.find({age: {$lte: 25}});
      
    8、查询age >= 23 并且 age <= 26
    db.userInfo.find({age: {$gte: 23, $lte: 26}});
      
    9、查询name中包含 mongo的数据
    db.userInfo.find({name: /mongo/});
    //相当于%%
    select * from userInfo where name like ‘%mongo%';
      
    10、查询name中以mongo开头的
    db.userInfo.find({name: /^mongo/});
    select * from userInfo where name like ‘mongo%';
      
    11、查询指定列name、age数据
    db.userInfo.find({}, {name: 1, age: 1});
    相当于:select name, age from userInfo;
    当然name也可以用truefalse,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
      
    12、查询指定列name、age数据, age > 25
    db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
    相当于:select name, age from userInfo where age >25;
      
    13、按照年龄排序
    升序:db.userInfo.find().sort({age: 1});
    降序:db.userInfo.find().sort({age: -1});
      
    14、查询name = zhangsan, age = 22的数据
    db.userInfo.find({name: 'zhangsan', age: 22});
    相当于:select * from userInfo where name = ‘zhangsan' and age = ‘22';
      
    15、查询前5条数据
    db.userInfo.find().limit(5);
    相当于:selecttop 5 * from userInfo;
      
    16、查询10条以后的数据
    db.userInfo.find().skip(10);
    相当于:select * from userInfo where id not in (
    selecttop 10 * from userInfo
    );
      
    17、查询在5-10之间的数据
    db.userInfo.find().limit(10).skip(5);
    可用于分页,limit是pageSize,skip是第几页*pageSize
      
    18、or与 查询
    db.userInfo.find({$or: [{age: 22}, {age: 25}]});
    相当于:select * from userInfo where age = 22 or age = 25;
      
    19、查询第一条数据
    db.userInfo.findOne();
    相当于:selecttop 1 * from userInfo;
    db.userInfo.find().limit(1);
      
    20、查询某个结果集的记录条数
    db.userInfo.find({age: {$gte: 25}}).count();
    相当于:select count(*) from userInfo where age >= 20;
      
    21、按照某列进行排序
    db.userInfo.find({***: {$exists: true}}).count();
    相当于:select count(***) from userInfo;
     
    索引
     
    1、创建索引
    db.userInfo.ensureIndex({name: 1});
    db.userInfo.ensureIndex({name: 1, ts: -1});
      
    2、查询当前聚集集合所有索引
    db.userInfo.getIndexes();
      
    3、查看总索引记录大小
    db.userInfo.totalIndexSize();
      
    4、读取当前集合的所有index信息
    db.users.reIndex();
      
    5、删除指定索引
    db.users.dropIndex("name_1");
      
    6、删除所有索引索引
    db.users.dropIndexes();
      
    修改、添加、删除集合数据
     
    1、添加
    db.users.save({name: ‘zhangsan', age: 25, ***: true});
    添加的数据的数据列,没有固定,根据添加的数据为准
      
    2、修改
    db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
    相当于:update users set name = ‘changeName' where age = 25;
      
    db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
    相当于:update users set age = age + 50 where name = ‘Lisi';
      
    db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
    相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';
      
    3、删除
    db.users.remove({age: 132});
      
    4、查询修改删除
    db.users.findAndModify({
      query: {age: {$gte: 25}},
      sort: {age: -1},
      update: {$set: {name: 'a2'}, $inc: {age: 2}},
      remove: true
    });
      
    db.runCommand({ findandmodify : "users",
      query: {age: {$gte: 25}},
      sort: {age: -1},
      update: {$set: {name: 'a2'}, $inc: {age: 2}},
      remove: true
    });
    update 或 remove 其中一个是必须的参数; 其他参数可选。
    参数
    详解
    默认值
    query
    查询过滤条件
    {}
    sort
    如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作
    {}
    remove
    若为true,被选中对象将在返回前被删除
    N/A
    update
    一个 修改器对象
    N/A
    new
    若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。
    false
    fields
    参见Retrieving a Subset of Fields (1.5.0+)
    All fields
    upsert
    创建新对象若查询结果为空。 示例 (1.5.4+)
    false
     
    语句块操作
     
    1、简单Hello World
    print("Hello World!");
    这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
      
    2、将一个对象转换成json
    tojson(new Object());
    tojson(new Object('a'));
      
    3、循环添加数据
    > for (var i = 0; i < 30; i++) {
    ... db.users.save({name: "u_" + i, age: 22 + i, ***: i % 2});
    ... };
    这样就循环添加了30条数据,同样也可以省略括号的写法
    > for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, ***: i % 2});
    也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
      
    4、find 游标查询
    >var cursor = db.users.find();
    > while (cursor.hasNext()) {
      printjson(cursor.next());
    }
    这样就查询所有的users信息,同样可以这样写
    var cursor = db.users.find();
    while (cursor.hasNext()) { printjson(cursor.next); }
    同样可以省略{}号
      
    5、forEach迭代循环
    db.users.find().forEach(printjson);
    forEach中必须传递一个函数来处理每条迭代的数据信息
      
    6、将find游标当数组处理
    var cursor = db.users.find();
    cursor[4];
    取得下标索引为4的那条数据
    既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
    那样我们也可以用循环显示数据
    for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
      
    7、将find游标转换成数组
    > var arr = db.users.find().toArray();
    > printjson(arr[2]);
    用toArray方法将其转换为数组
      
    8、定制我们自己的查询结果
    只显示age <= 28的并且只显示age这列数据
    db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
    db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
    排除age的列
    db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
      
    9、forEach传递函数显示信息
    db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

    参考文章①:http://blog.csdn.net/ssyan/article/details/6927307

    参考文章②:http://blog.chinaunix.net/uid-26558059-id-3211264.html

  • 相关阅读:
    推送技术 --SignalR
    软件解耦
    xrBarCode 条形码的密度设置
    Javascript 中方法的重写
    数据库锁
    oracle instr,substr 截取字符串
    循环读取写入表
    Oracle For 循环,字符串拼接,查找
    iis,webservice 启用 acrobat.exe 打印
    iis,webservice 打印
  • 原文地址:https://www.cnblogs.com/pejsidney/p/8252377.html
Copyright © 2020-2023  润新知