MongoDB是一个基于文档型数据库,使用BSON(一种和JSON类似的)东西作为数据格式。以下是MongoDB的应用场景:
- 网站数据:MongoDB非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
- 用于对象及JSON数据的存储:MongoDB的BSON数据格式非常适合文档化格式的存储及查询。
- 行业具体应用场景
• 游戏场景:使用MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新。
• 物流场景:使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
• 社交场景:使用MongoDB存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
以上信息仅供参考,如有需要,您可以咨询MongoDB相关行业的专家或开发者。
除了上述的应用场景,MongoDB还可以用于以下领域: - 内容管理系统:MongoDB可以轻松存储文章、评论等,通过查询功能方便快速找到需要的文章或内容,并通过一些工具轻松实现文章的批量管理和后台生成。
- 电子商务平台:MongoDB可以存储商品信息、用户信息、购物车信息等,通过查询和索引功能快速找到商品、用户和购物车信息,提高购物体验。
- 数据分析平台:MongoDB可以存储大量的数据,通过聚合、分析等功能实现数据的深度挖掘和利用。
以上就是MongoDB的一些应用场景,具体使用方式要根据实际情况和业务需求进行选择和调整。 - 物联网(IoT):MongoDB的灵活数据模型和可扩展性使其成为物联网设备的理想选择。可以存储和处理来自各种设备的实时数据,如传感器数据、位置信息等。
- 人工智能和机器学习:MongoDB可以存储和查询大量数据,这使得它成为机器学习和人工智能项目的理想选择。可以通过MongoDB来存储、处理和查询训练数据。
- 社交网络:MongoDB适合存储社交网络中的用户信息、关系和活动数据。可以通过地理位置索引实现附近的人、地点等功能。
- 开发工具和平台:MongoDB可以用作文档存储和版本控制,例如Git、Jira等工具。
总的来说,MongoDB是一个强大、灵活且可扩展的数据库,适用于各种应用场景,特别是需要高性能、高可扩展性和实时查询的场景。 - 移动应用后端:MongoDB可以作为移动应用的数据库,存储用户信息、应用数据等。通过MongoDB的查询和索引功能,可以快速获取和更新数据,提高应用的响应速度和用户体验。
- 视频和图像存储:MongoDB可以用于存储和管理视频和图像数据。通过使用GridFS等特性,可以将大文件存储在MongoDB中,并提供快速访问和检索。
- 邮件和消息传递系统:MongoDB可以用于存储邮件和消息数据,包括邮件内容和元数据、消息发送和接收等。通过MongoDB的查询和索引功能,可以实现快速的数据检索和处理。
- 分布式系统:MongoDB支持自动分片功能,可以将数据分布到多个服务器上,实现分布式存储和处理。这使得MongoDB成为构建大规模分布式系统的理想选择。
以上是MongoDB的一些其他应用场景,可以看出MongoDB在各个领域都有广泛的应用。MongoDB的灵活性、高性能和可扩展性使其成为各种应用场景的理想选择。 - 实时分析:MongoDB的实时分析功能可以帮助企业快速获取业务数据,并进行实时分析。例如,可以通过MongoDB的聚合管道对销售数据进行实时分析,以便及时调整销售策略。
- 金融领域:MongoDB在金融领域也有广泛应用,如股票交易、金融数据存储和分析等。MongoDB的高性能和可扩展性使其能够处理大量的金融数据,并提供实时的查询和分析功能。
- 云计算:MongoDB可以作为云计算平台的数据库解决方案,提供可伸缩、高性能和可靠的数据库服务。例如,MongoDB可以部署在AWS、Azure、阿里云等云平台上,提供云数据库服务。
综上所述,MongoDB是一个强大的数据库,可以在各个领域中找到应用,包括但不限于网站开发、移动应用后端、物联网、人工智能、社交网络等领域。它的灵活数据模型、高性能和可扩展性使其成为构建各种应用场景的理想选择。
除了上述应用场景,MongoDB还可以在数据备份和恢复、搜索引擎、API网关等方面得到应用。MongoDB的复制集功能可以用于数据备份和恢复,保证数据的安全性和可靠性。同时,MongoDB的文本搜索和地理空间索引功能可以用于搜索引擎的构建,提高搜索的准确性和效率。另外,MongoDB可以作为API网关的后端存储,提供数据存储和查询服务。
总之,MongoDB是一个强大、灵活且可扩展的数据库,适用于各种应用场景,无论是传统应用还是新兴领域,都能发挥其独特的优势。
添加有两种方式insert()与save()
MongoDB是面向文档存储的数据库,文档结构形式叫BSON(类似JSON)
db.c1.insert({name:“user1”});
db.c1.save({_id:1, name:“user1”});
他们两者之间的区别是:
1、使用save函数里,如果原来的对象不存在,那他们都插入数据,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作
2、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。具体的看一下函数的源码。
数组操作?
KaTeX parse error: Expected '}', got 'EOF' at end of input: …oo.update({},{"push":{“users”:1}})向users数组末尾添加一个1元素
db.foo.update({},{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …sh":{"users":{“each”:[1,2]}}})向users数组末尾添加多个元素,要$each 配合使用
a d d T o S e t 可以避免插入重复元素,配合 addToSet 可以避免插入重复元素,配合 addToSet可以避免插入重复元素,配合each使用,可以添加多个不同的值,数组修改器慢,因为文档大小可能会变
$pop从头部或尾部删除元素
KaTeX parse error: Expected '}', got 'EOF' at end of input: …oo.update({},{"set”:{name:‘tes’}},false,true)
在MongoDB找下级是按点的方式:比如user下有叫logs数组,就user.logs
修改?
db.collection.update( , , , )
修改现有存在的文档或集合时使用。默认的update()方法值更新单个文档。但是如果multi参数设置为true,则更新操作可以更新全部符合条件的文档。
Query – 类型:文档;用于更新选择过滤。
Update – 类型:文档;需要更新的文档的内容。
Upsert – 类型:文档或boolean;设置为true时,当查询没有匹配到文档时进行新建。默认值为false
Multi: - 类型:文档或boolean;设置为true时,则更新满足查询条件的所有文档(多个)。设置为false时只更新单个文档。默认为false。
删除?
db.collection.remove(query, justOne)
Query – 类型:文档;用于删除选择过滤。
JustOne – 类型:boolean;当设置为true时只删除一个文档。
db.collection.remove({});删除collection中的所有数据,一旦删除不可恢复。但是不会删除collection;
db.collection.drop();直接删除collection;
去重?
Distinct()
db.collection.distinct(field, query)
Field – 类型:字符串;返回非重复的字段。
Query – 类型:文档;查询条件。
db.user.distinct(“_id”, {age: 1})
查询?
db.collection.find(, )
find()返回的是一个文档集合;
db.collection.findOne(, )
findOne()返回的是一个文档
前一个是查询条件,后一个参数是显示的数据
查询操作符(Query Operators)可以让我们写出复杂查询条件,让我们使用的过程更加灵活。
比较查询操作符
$all
语法: { field: { $all: [ , … ] }
field:文档中键的名称(不使用双引号)。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法:{field: {gt: value} }
匹配键值大于指定值的所有文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {gte: value} }匹配键值不小于指定值的所有文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法:{field: {lt: value} }匹配键值小于指定值的所有文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {lte: value} }匹配键值不大于指定值的所有文档。
$in 语法: { field: { $in: [, , … ] } }匹配键值等于指定数组中任意值的文档。类似sql中in.
$nin 语法: { field: { $nin: [ , … ]} }匹配键不存在或者键值不等于指定数组的任意值的文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法: {field: {ne: value} }匹配键值不等于指定值的文档。
逻辑查询操作符
$and 语法: { $and: [ { }, { } , … , { } ] }and指定一个至少包含两个表达式的数组,选择出满足该数组中所有表达式的文档。and操作符使用短路操作,若第一个表达式的值为“false”,余下的表达式将不会执行。
$nor语法: { KaTeX parse error: Expected 'EOF', got '}' at position 70: …pressionN> } ] }̲ nor执行逻辑NOR运算,指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档。
$not语法: { field: { KaTeX parse error: Expected 'EOF', got '}' at position 32: …-expression> } }̲ }not执行逻辑NOT运算,选择出不能匹配表达式的文档 ,包括没有指定键的文档。
n
o
t
操作符不能独立使用,必须跟其他操作一起使用(除
not操作符不能独立使用,必须跟其他操作一起使用(除
not操作符不能独立使用,必须跟其他操作一起使用(除regex)。
KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {gte: value} }匹配键值不小于指定值的所有文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法:{field: {lt: value} }匹配键值小于指定值的所有文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {lte: value} }匹配键值不大于指定值的所有文档。
$in 语法: { field: { $in: [, , … ] } }匹配键值等于指定数组中任意值的文档。类似sql中in.
$nin 语法: { field: { $nin: [ , … ]} }匹配键不存在或者键值不等于指定数组的任意值的文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法: {field: {ne: value} }匹配键值不等于指定值的文档。
逻辑查询操作符
$and 语法: { $and: [ { }, { } , … , { } ] }and指定一个至少包含两个表达式的数组,选择出满足该数组中所有表达式的文档。and操作符使用短路操作,若第一个表达式的值为“false”,余下的表达式将不会执行。
$nor语法: { KaTeX parse error: Expected 'EOF', got '}' at position 70: …pressionN> } ] }̲ nor执行逻辑NOR运算,指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档。
$not语法: { field: { KaTeX parse error: Expected 'EOF', got '}' at position 32: …-expression> } }̲ }not执行逻辑NOT运算,选择出不能匹配表达式的文档 ,包括没有指定键的文档。
n
o
t
操作符不能独立使用,必须跟其他操作一起使用(除
not操作符不能独立使用,必须跟其他操作一起使用(除
not操作符不能独立使用,必须跟其他操作一起使用(除regex)。
如果文档的键值是一个数组。那么$type将对数组里面的元素进行类型匹配而不是键值数组本身。
JavaScript查询操作符
$regex regex操作符查询中可以对字符串的执行正则匹配。MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式. 可以使用正则表达式对象或者regex操作符.
db.inventory.find( { name: /.4/i } );
db.inventory.find( { name: { $regex: ‘.4’, $options: ‘i’ } } );
options(regex 提供四个选项标志)
i 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
m 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行).如果目标字符串 中没有 "\n"字符,或者模式中没有出现“行首”/“行末”字符,设置这个修饰符不产生任何影响。
s 如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符。
x 如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略,并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符使被编译模式中可以包含注释。 注意:这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现,比如序列 。
注:JavaScript只提供了i和m选项,x和s选项必须使用$regex操作符。
$where $where操作符功能强大而且灵活,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。最典型的应用就是比较文档中的两个键的值是否相等.
索引?
在MongoDB上,索引能提高读操作和查询性能,没有索引,mongoDB必须扫描集合中的每一个文档,然后选择与查询条件匹配的文档。
索引的管理<创建索引,删除索引>
创建索引命令
db.foo.ensureIndex({“x”:1, “y”:-1})使用ensureIndex来创建索引,1为升序,-1为倒序
db.test.ensureIndex({“x”:1}, {“unique”:true})
上面这条语句是创建唯一索引,创建唯一索引前可能会有重复数据,我们可以使用”dropDups”来鲁莽的删除这些重复数据,写法如下
db.test.ensureIndex({“x”:1}, {“unique”:true, “dropDups”:true})
我们可以在创建索引时,为索引起个名字,而不是用系统自动生成的名字,写法如下:
db.test.ensureIndex({“x”:1}, {“name”: “myindex”})
当我们的集合数据量很大的时候,创建索引是一件费时费力的事情,我们可以这些写创建索引的语句,是创建索引的过程在后台完成:
db.test.ensureIndex({“x”:1}, {“background”:true})
删除索引
db.test.dropIndex(“”);
聚合函数?
count
最简单的聚合工具就是count了,它返回document的数量
db.foo.count()可以不跟参数也可以跟查询条件
distinct
distinct命令返回指定的key的所有不同的值。你必须指定一个collection和一个key。
db.runCommand({“distinct”:" people",“key”:" age"})
group
{“KaTeX parse error: Expected '}', got 'EOF' at end of input: group":{"_id":"author”,“count”:“{“sum”:1}”}}
sort
{“$sort”:{“count”:-1}} 排序,类似于sql中的order by -1是降序排列,1是正序排列
limit
分页
match 用于对文档集合进行筛选