随笔- 310  文章- 1  评论- 0  阅读- 86009 

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

下载

https://www.mongodb.com/download-center#community
环境变量:MongoDB\Server\3.4\bin

MongoDB术语

数据库(数据库)、集合(表格)、文档(行)、字段(列)、嵌入文档(表联合)

常用数据类型

String、 Integer 、Boolean、 Double、 Array、 Date、 Timestamp(时间戳)、 Null(用于创建空值)、 Object(用于内嵌文档)
Symbol 符号,该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言
Code 代码类型,用于在文档中存储 JavaScript 代码。
Object ID 对象ID,用于创建文档的 ID。
Binary Data 二进制数据,用于存储二进制数据。
Regular expression 正则表达式类型,用于存储正则表达式。

操作

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
1.启动/关闭
    在E:\Program Files\MongoDB\Server\3.4新建目录  db
    在E:\Program Files\MongoDB\Server\3.4目录下运行命令:mongod --dbpath=db --rest
    win+R:输入mongo可使用基本命令操作
    mongod --shutdown [关闭]
2.连接
    [连接本地数据库服务器]mongodb://localhost
    [使用用户名和密码连接登陆到指定数据库]mongodb://admin:123456@localhost/test
3.监控(进入到你安装的MongoDB目录下的bin目录)
    E:\Program Files\MongoDB\Server\3.4\bin>mongostat    [它会间隔固定时间获取mongodb的当前运行状态] 
    E:\Program Files\MongoDB\Server\3.4\bin>mongotop [查看哪些大量的时间花费在读取和写入数据]
4.基本命令
    mongodump -h 127.0.0.1 -d dbname -o c:\data\dump[数据备份]
1)创建、查询
操作符  大于:$gt 小于:$lt  大于等于:$gte   小于等于:$lte 不等于$ne
    d=({"a1":"hello",b1:45})    [定义一个变量]
    use runoob [数据库不存在,则创建数据库,否则切换到指定数据库]
    show dbs [查看所有数据库]
    show tables [查看集合]
    db.userInfo.getIndexes()[查询当前聚集集合所有索引]
    db.userInfo.dataSize()  [查看数据空间大小]
    db.userInfo.getDB()     [得到当前聚集集合所在的]
    db.userInfo.stats()     [得到当前聚集的状态]
    db.userInfo.totalSize() [得到聚集集合总大小]
    db.userInfo.storageSize()       [聚集集合储存空间大小]
    db.userInfo.getShardVersion()   [Shard版本信息  ]
    db.userInfo.renameCollection("users")   [聚集集合重命名,将userInfo重命名为users]
    db.runoob.findOne();
    db.runoob.find() [查看集合中所有数据]
    db.runoob.count() [返回文档个数]
    db.userInfo.find({}, {name: 1, age: 1})     [select name, age from userInfo]
    db.userInfo.find({age:{$gt:25}},{name:1,age:1}) [select name, age from userInfo where age >25]
    db.runoob.find({$or:[{age: 22},{age: 25}]}) [查找age=22或age=25的文档]
    db.col.find({"likes": {$gt:50}, $or: [{"by": "we"},{"title":"t1"}]}) [and和or复用]
    db.funoob.find({id:{$in:[12,34,33]}})       [查找id为12,34,33的文档]
    db.runoob.find({"name" : {$gt : 100}})      [获取runoob集合中 "name" 大于 100 的数据]
    db.col.find({"title":1,_id:0}).limit(2)     [显示符合条件的两条记录]
    db.col.find({"title":1,_id:0}).limit(100).skip(10)  [读取从 10 条记录后 100 条记录]
    db.col.find({"title":1,_id:0}).sort({"likes":-1})   [ col 集合中的数据按字段 likes 的降序排列]
    db.col.find({name:{$regex:"jack",$options:"$i"}})   [正则表达式查询jack不分大小写]
    db.th2.find({name:{$regex:"^j"}})   [查询name字段中j开头的所有文档]
    db.th2.find({name:{$regex:"runoob"}})   [查找包含 runoob 字符串的文章]
    db.th2.find({name:/runoob/})    [查找包含 runoob 字符串的文章]
2)插入数据
    db.runoob.insert({"name":"菜鸟教程"})           [use runoob,进入runnob数据库,在集合runboob中插入文档]
    db.runoob.insert([{name:"tom"},{name:"jack"}])  [插入多个文档]
3)更新
     db.runoob.update({"ji":90},{$set:{"ji":"hello"}}) [将ji为90的第一个文档更新为hello]
     db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}}) [更新多个文档]
4)删除
    db.dropDatabase()   [删除数据库]
    db.book.drop() [删除集合book]
    db.book.remove({"title":"1"}) [删除文档(可删除多个)]
    db.book.remove({"title":"1"},true) [删除单个文档]
5)查询分析
    db.book.ensureIndex({name:1,id:1})  [book集合中创建name、id索引]
    db.book.find().explain();   [explain 操作提供了查询信息,使用索引及查询统计等]
[全文检索] 
    2.6 版本之前启用全文检索
    db.adminCommand({setParameter:true,textSearchEnabled:true})
    或mongod --setParameter textSearchEnabled=true
    db.book.ensureIndex({"name":"text"})        [name字段建立全文检索]
    db.book.find({$text:{$search:"runoob"}})[使用全文索引搜索文章中的关键词 runoob]
    db.book.getIndexes()                    [删除全文索引]
6)原子操作
    $set:用来指定一个键并更新键值,若键不存在并创建
        { $set : { field : value } }
    $unset:用来删除一个键
        { $unset : { field : 1} }
    $inc:可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作
        { $inc : { field : value } }
    $push:把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去
        { $push : { field : value } }
    $pushAll:同$push,只是一次可以追加多个值到一个数组字段内
        { $pushAll : { field : value_array } }
    $pull:从数组field内删除一个等于value值。
        { $pull : { field : _value } }
    $addToSet:增加一个值到数组内,而且只有当这个值不在数组内才增加
    $pop:删除数组的第一个或最后一个元素
        { $pop : { field : 1 } }
    $rename:修改字段名称
        { $rename : { old_field_name : new_field_name } }
    $bit:位操作,integer类型
        {$bit : { field : {and : 5}}}
7)MapReduce 命令
    使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value),
    遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。
    db.collection.mapReduce(
        function(){emit(key,value);},//map函数
        function(key,values){return reduceFunction},//reduce函数
        {  
            out:collection,
            query:documet,
            sort:document,
            limit:number,
        }
    )
    参数说明:
        map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
        reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
        out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
        query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
        sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
        limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

  

 

 posted on   boye169  阅读(285)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示