进入bin并启动mongodb服务
sudo ./mongod
开启另外一个终端并进入/mongodb/bin
./mongo 进入shell
文档是一组key-value,mongodb不需要设置相同的字段,且相同的字段不需要相同的数据类型,与关系数据库有着很大的区分
集合就是文档组,可以将不同数据结构的文档存入集合中:
{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.runoob.com","name":"菜鸟教程","num":5}
Capped collections就是固定大小的collection,高性能自动的维护对象的插入顺序,按照文档的插入顺序保存到集合中,而且这些文档在磁盘上存放位置也是按照插入顺序来保存的,更新文档的时候不能超过之前的文档大小
ObjectId=时间戳(4)+机器(3)+PID(2)+计数器(3)
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb:// 这是固定的格式,必须要指定
username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址
portX 可选的指定端口,如果不填,默认为27017
/database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库
?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
使用本地默认端口连接mongodb的服务
mongodb://localhost
查看所有数据库
show dbs
创建数据库(创建数据后如果不往其中插入数据,show dbs是不会显示的)
use DATABASE_NAME #runoob
插入数据后,我们再show dbs:
> db.runoob.insert({"name":"菜鸟教程"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
runoob 0.000GB
先切换到runoob2数据库再删除它:
> use runoob2
switched to db runoob2
> db.dropDatabase()
{ "dropped" : "runoob2", "ok" : 1 }
切换到runoob数据库,创建runoob集合,再删除runoob集合:
> use runoob
switched to db runoob
> db.createCollection("runoob")
{ "ok" : 1 }
> show tables #从这里发现集合类似表
runoob
> db.runoob.drop() #db下的runoob集合
true
> show tables
>
创建集合
db.createCollection(name,options)
-name:要创建的集合名称
-options:可选参数,指定有关内存大小及索引的选型
切换到test数据库,创建runoob集合并show:
> use test
switched to db test
> db.createCollection("runoob")
{ "ok" : 1 }
> show collections
runoob
创建带参集合:
-capped 如果为true,必须指定size参数,且当容量达到最大值时,它会自动覆盖最早的文档
-autoIndexId 若果为true,自动在_id字段创建索引,默认false
-size 为固定集合指定一个最大值,以字节计
-max 指定固定集合中包含文档的最大数量
创建固定集合mycol,整个集合大小6142800KB,文档最大个数为10000个
> db.createCollection("mycol",{capped:true,autoIndexId:true,size:6142800,max:10000})
{
"note" : "the autoIndexId option is deprecated and will be removed in a future release",
"ok" : 1
}
> show collections
mycol
runoob
> db.mycol.insert({"name":"菜鸟教程"})
WriteResult({ "nInserted" : 1 })
> show collections
mycol
runoob
删除集合:
> show collections
mycol
runoob
> db.mycol.drop()
true
> show collections
runoob
MongoDB 使用 insert() 或 save() 方法向集合中插入文档:
> db.createCollection("col")
{ "ok" : 1 }
> db.col.insert({title:‘MongoDB 教程‘,})
WriteResult({ "nInserted" : 1 })
> db.col.insert({title:‘MongoDB 教程‘,description:‘MongoDB 是一个 Nosql 数据库‘ ,by:‘菜鸟教程‘,url:‘http://www.runoon.com‘,tags:[‘mongodb‘,‘database‘,‘NoSQL‘],likes:100})
WriteResult({ "nInserted" : 1 })
查找col集合下的所有文档:
> db.col.find()
{ "_id" : ObjectId("5d31429d8035dcbc4ca130f2"), "title" : "MongoDB 教程" }
{ "_id" : ObjectId("5d3143758035dcbc4ca130f3"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoon.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
我们可以定义一个文档对象再进行插入:
> document=({title: ‘MongoDB 教程‘,
... description: ‘MongoDB 是一个 Nosql 数据库‘,
... by: ‘菜鸟教程‘,
... url: ‘http://www.runoob.com‘,
... tags: [‘mongodb‘, ‘database‘, ‘NoSQL‘],
... likes: 100
... });
{
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
> db.col.insert(document)
WriteResult({ "nInserted" : 1 })
插入单条数据:
> var document = db.collection.insertOne({"a": 3})
> document
{
"acknowledged" : true,
"insertedId" : ObjectId("571a218011a82a1d94c02333")
}
插入多条数据:
> var res = db.collection.insertMany([{"b": 3}, {‘c‘: 4}])
> res
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("571a22a911a82a1d94c02337"),
ObjectId("571a22a911a82a1d94c02338")
]
}
或者一次插入多条数据:
1、先创建数组
2、将数据放在数组中
3、一次 insert 到集合中
通过update更新
db.collection.update(
<query>,
<update>,
{
upset:<boolean>,
multi:<boolean>,
writeConcern:<document>
}
)
-query update查询条件
-update 类似于sql的set
-upsert 如果不存在update的记录 true插入 false不插入
-multi 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
-writeConcern
> db.col.update({‘title‘:‘MongoDB‘},{$set:{‘title‘:‘MongoDB教程‘}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
save()方法通过传入的文档来替换已有文档 替换_id为56064f89ade2f21f36b03136 的文档数据
>db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } )
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true )
删除文档:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
-justOne 如果设置true 则只删除一个文档 默认false删除所有匹配的文档
> db.col.remove({‘title‘:‘MongoDB教程‘})
WriteResult({ "nRemoved" : 2 })
如删除集合下全部文档:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
如果以易读的方式来读取数据,可以使用pretty()
> db.col.find().pretty()
{
"_id" : ObjectId("5d3143c78035dcbc4ca130f4"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty()
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty()
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty()
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty()
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty()
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty()
MongoDB AND条件 每个键(key)以逗号隔开,即常规 SQL 的 AND 条件
>db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR条件
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
>db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
AND 和 OR 联合使用,类似常规 SQL 语句为: ‘where likes>50 AND (by = ‘菜鸟教程‘ OR title = ‘MongoDB 教程‘)‘
>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
模糊查询
查询 title 包含"教"字的文档:
db.col.find({title:/教/})
查询 title 字段以"教"字开头的文档:
db.col.find({title:/^教/})
查询 titl e字段以"教"字结尾的文档:
db.col.find({title:/教$/})
$type可根据字段的数据类型查询数据
db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : ‘string‘}})
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
显示查询文档中两条记录
> db.col.find({},{"title":1,_id:0}).limit(2)
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }
通过skip()来读取指定数量外的数据,与limit互补
> db.col.find().skip(1)
{ "_id" : ObjectId("5d316ac98035dcbc4ca130f6"), "title" : "菜鸟教程2" }
{ "_id" : ObjectId("5d316ace8035dcbc4ca130f7"), "title" : "菜鸟教程3" }
使用sort()方法对数据进行排序 sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列
col 集合中的数据按字段 likes 的降序排列
>db.COLLECTION_NAME.find().sort({KEY:1})
索引本质是一种数据结构 比如B+树
>db.collection.createIndex(keys, options)
>db.col.createIndex({"title":1})
Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1
聚合函数aggregate()
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
"result" : [
{
"_id" : "runoob.com",
"num_tutorial" : 2
},
{
"_id" : "Neo4j",
"num_tutorial" : 1
}
],
"ok" : 1
}
以上实例类似sql语句:
select by_user, count(*) from mycol group by by_user
$sum
$avg
$min
$max
原文:https://www.cnblogs.com/hbsdljz/p/11237322.html