一,MongoDB shell基本命令
(1)"show dbs" 命令可以显示所有数据的列表。
(2)"db" 命令可以显示当前数据库对象或集合。
(3)"use"命令,可以连接到一个指定的数据库。当数据库不存在时,use创建数据库。
创建的数据库在show dbs列表中是不存在的。要显示数据库,需要把它插入至少一个文件。
db.movie.insert({"name":"yiibai tutorials"})
在 MongoDB 默认数据库test。如果没有创建任何数据库,然后集合将被存储在测试数据库。
(4)"dropDatabase()" 删除数据库
命令如下:db.dropDatabase()
这将删除选定的数据库。如果没有选择任何数据库,那么它会删除默认的“test”数据库
例子:
>use mydb
switched to db mydb
>db.dropDatabase()
>{ "dropped" : "mydb", "ok" : 1 }
>
(5)"db.createCollection(name,options)" 创建集合
"show collections" 命令来检查创建的集合
在命令中, name 是要创建集合的名称。 options 是一个文档,用于指定集合的配置,可不写
例子:
>use test
switched to db test
>db.createCollection("mycollection")
{ "ok" : 1 }
>
字段 |
类型 |
描述 |
capped |
Boolean |
(可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。 |
autoIndexID |
Boolean |
(可选)如果为true,自动创建索引_id字段的默认值是false。 |
size |
number |
(可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。 |
max |
number |
(可选)指定封顶集合允许在文件的最大数量。 |
例子如下:
>db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
{ "ok" : 1 }
>
(6)"db.COLLECTION_NAME.drop()"删除集合
例子如下:
>use mydb
switched to db mydb
>db.mycollection.drop()
true
>
(7)"db.COLLECTION_NAME.insert(document)"在集合中插入文档
>db.mycol.insert({
_id: ObjectId(7df78ad8902c),
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
这里 mycol 是我们的集合名称,它是在之前的教程中创建。如果集合不存在于数据库中,那么MongoDB创建此 集合,然后插入文档进去。在如果我们不指定_id参数插入的文档,那么 MongoDB 将为文档分配一个唯一的 ObjectId。
_id 是12个字节十六进制数在一个集合的每个文档是唯一的。 12个字节被划分如下:
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
要以单个查询插入多个文档,可以通过文档 insert() 命令的数组方式。
>db.post.insert([
{
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
title: 'NoSQL Database',
description: 'NoSQL database doesn't have tables',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 20,
comments: [
{
user:'user1',
message: 'My first comment',
dateCreated: new Date(2013,11,10,2,35),
like: 0
}
]
}
])
save()
如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
save和insert区别
当"_id"在集合中存在时,insert不做处理,save进行更新
(8)"db.COLLECTION_NAME.find()"查询文档
find() 方法将在非结构化的方式显示所有的文件。 如果显示结果是格式化的,那么可以用pretty() 方法。
如:>db.mycol.find().pretty()
例子如下:
>db.mycol.find().pretty()
{
"_id": ObjectId(7df78ad8902c),
"title": "MongoDB Overview",
"description": "MongoDB is no sql database",
"by": "yiibai tutorials",
"url": "http://www.yiibai.com",
"tags": ["mongodb", "database", "NoSQL"],
"likes": "100"
}
>
除了find()方法还有findOne()方法,仅返回一个文档。
>var model=db.user.findOne({"name":"jack"})
>model.age=30
这里使用findOne方法更新age为30
A,查询返回指定字段
db.mydb.find( { type: 'food' }, { item: 1, qty: 1, _id:0 } )
返回type是food的文档的 item,qty字段,不返回_id字段(默认返回_id字段)
B,查询条件(where)
要在一些条件下查询文件,(等同于where语句)
1,大小比较
操作 |
语法 |
例子 |
RDBMS 等同 |
Equality |
{:} |
db.mycol.find({"by":"tutorials yiibai"}).pretty() |
where by = 'tutorials yiibai' |
Less Than |
{:{$lt:}} |
db.mycol.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
Less Than Equals |
{:{$lte:}} |
db.mycol.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
Greater Than |
{:{$gt:}} |
db.mycol.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
Greater Than Equals |
{:{$gte:}} |
db.mycol.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
Not Equals |
{:{$ne:}} |
db.mycol.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
2,and
在find() 方法,如果通过多个键分离',',那么 MongoDB 处理 AND 条件。AND 基本语法如下所示:
>db.mycol.find({key1:value1, key2:value2}).pretty()
3,or
OR条件的基础上要查询文件,需要使用$or关键字。OR 基本语法如下所示:
>db.mycol.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
4,and和or一起使用
举例如下:
>db.mycol.find({
"likes": {$gt:10}
,
$or: [{"by": "yiibai"}, {"title": "MongoDB Overview"}]
}).pretty()
{
"_id": ObjectId(7df78ad8902c),
"title": "MongoDB Overview",
"description": "MongoDB is no sql database",
"by": "yiibai",
"url": "http://www.yiibai.com",
"tags": ["mongodb", "database", "NoSQL"],
"likes": "100"
}
>
5,in 和 notIn
"$in" "$nin"与in 和 notIn对应
6,正则表达式
db.user.find({"name":/^j/,"name":/e$/})
7,当查询比较复杂时,可以使用$where
db.user.find({$where:function(){return this.name=='jack'}})
8,$type实例
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:
db.col.find({"title" : {$type : 2}})
类型 |
数字 |
备注 |
Double |
1 |
|
String |
2 |
|
Object |
3 |
|
Array |
4 |
|
Binary data |
5 |
|
Undefined |
6 |
已废弃。 |
Object id |
7 |
|
Boolean |
8 |
|
Date |
9 |
|
Null |
10 |
|
Regular Expression |
11 |
|
JavaScript |
13 |
|
Symbol |
14 |
|
JavaScript (with scope) |
15 |
|
32-bit integer |
16 |
|
Timestamp |
17 |
|
64-bit integer |
18 |
|
Min key |
255 |
Query with -1. |
Max key |
127 |
|
(9) "update() save() "更新文档
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false, 不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条 记录全部更新。
writeConcern :可选,抛出异常的级别。
(注:upsert和multi默认false)
举例:
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
1,update() 更新现有文档值。
>db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
例子如下:
>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
这里用了$set 局部更新 仅仅更新指定字段
>db.user.update({"name":"jack"},{"name":"jack","age":"20"})
这里是全局更新,把所有的数据更新
>db.user.update({"name":"jack"},{$inc:{"age":30}})
上面的$set和$inc是修改器,$inc表示自增,每次修改会在原有的基础上自增$inc指定的值
MongoDB默认将只更新单一的文件,来更新多个你需要设置参数置'multi' 为true
如:
>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}}, {multi:true})
2,save()
>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
如果不指定_id字段save()方法类似于insert()方法。如果指定_id字段,则会更新(update)该_id的数 据。
(10)update()更多实例
只
更新
第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部
更新
:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只
添加
第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部
添加
加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部
更新
:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只
更新
第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
(11)"remove()"删除文档
db.collection.remove(
,
)
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove(
,
{
justOne: ,
writeConcern:
}
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。
如果你想删除所有数据,可以使用以下方式
>db.col.remove({})
>db.col.find()
>