基本操作命令(From菜鸟教程)

来源:互联网 发布:斗地主残局软件 编辑:程序博客网 时间:2024/05/19 03:20
1、创建数据库 runoob:
use runoob
如果数据库不存在,则创建数据库,否则切换到指定数据库。

2、查看所有数据库,可以使用 show dbs 命令:
> db.runoob.insert({"name":"菜鸟教程"})
WriteResult({ "nInserted" : 1 })
> show dbs
local   0.078GB
runoob  0.078GB
test    0.078GB


3、删除数据库
> use runoob
switched to db runoob
> db.dropDatabase()
{ "dropped" : "runoob", "ok" : 1 }

4、插入文档
>db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

查看
> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.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
});

> db.col.insert(document)
WriteResult({ "nInserted" : 1 })


--插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。 

5、使用 update() 和 save() 方法来更新集合中的文档
update() 方法
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }

参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

--將title的'MongoDB 教程'改為'MongoDB'
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息

以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
 >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})


save() 方法

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
参数说明:
 document : 文档数据。
writeConcern :可选,抛出异常的级别。

替换 _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.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 );

6、刪除數據
remove() 方法的基本语法格式如下所示: 
db.collection.remove(
   <query>,
   <justOne>
)
 
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
 db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }

参数说明:
 query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
 writeConcern :(可选)抛出异常的级别。

>db.col.remove({'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 })           # 删除了两条数据
>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)   # 如果你只想删除第一条找到的记录可以设置 justOne 为 1

>db.col.remove({})  # 如果你想删除所有数据

7、查詢
MongoDB 查询数据的语法格式如下:
 >db.COLLECTION_NAME.find() 
find() 方法以非结构化的方式来显示所有文档。
 
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
 >db.col.find().pretty() 
pretty() 方法以格式化的方式来显示所有文档。

除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

=======指定返回的键,通过find或findOne的第二个参数指定想要的键。=======

> db.visithomepage.find({},{"user_id"  : 1,"time" :1})

{ "_id" : ObjectId("4e0713be3ded0ab30ccb4b81"), "user_id" : NumberLong(22715364), "time" : NumberLong(1305108928) }

把不需要看到的,改成0,比如把_id改成0,不让他回复。

> db.visithomepage.find({},{"user_id"  : 1,"time" :1,"_id" : 0})
{ "user_id" : NumberLong(23020418), "time" : NumberLong(1305105014) }

=======限制:不可以引用文档中其他键的值。=========

========================================
sort用一个对象作为参数:1代表升序,-1降序。如果指定了多个键,则按照多个键的顺序依次排序。
db.users.find().sort({"username" : 1, "age" : -1})
========================================

与数值元素匹配
db.things.find({ x : { $in: [2, 4, 6]}}); // x in array
db.things.find({ x: { $nin: [2, 4, 6]}}); // x not in array

$all 匹配所有
这个操作符跟SQL语法的in类似,但不同的是, in只需满足( )内的某一个值即可,  而$all必
须满足[ ]内的所有值,例如:
db.users.find({age : {$all : [6, 8]}}); 
可以查询出  {name: 'David', age: 26, age: [ 6, 8, 9 ] } 
但查询不出  {name: 'David', age: 26, age: [ 6, 7, 9 ] }

$exists 判断字段是否存在
查询所有存在age字段的记录 
db.users.find({age: {$exists: true}}); 
查询所有不存在name字段的记录 
db.users.find({name: {$exists: false}});

Null 值处理
> db.c2.find({age:null})  

$mod 取模运算
查询age取模6等于1的数据
db.c1.find({age: {$mod : [ 6 , 1 ] } })

====================================================
存储过程

关于存储过程你需要知道的第一件事就是它是用 javascript来写的。
MongoDB 存储过程是存储在db.system.js表中的,我们想象一个简单的sql自定义函数如下:

 function addNumbers( x , y ) {
    return x + y;
}
下面我们将这个sql自定义函数转换为MongoDB 的存储过程: 

> db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }}); 

存储过程可以被查看,修改和删除,所以我们用 find 来查看一下是否这个存储过程已经被创建上了。 
> db.system.js.find()                                     
调用一下这个存储过程:
db.eval_r('addNumbers(3, 4.2)');

db.eval_r()是一个比较奇怪的东西,我们可以将存储过程的逻辑直接在里面并同时调用,而无需事先声明存储过程的逻辑。 
 
db.eval_r( function() { return 3+3; } );
====================================================

等于
db.col.find({"by":"菜鸟教程"}).pretty()
where by = '菜鸟教程'
 
小于
db.col.find({"likes":{$lt:50}}).pretty()
where likes < 50
 
小于或等于 
db.col.find({"likes":{$lte:50}}).pretty()
where likes <= 50
 
大于
db.col.find({"likes":{$gt:50}}).pretty()
where likes > 50
 
大于或等于
db.col.find({"likes":{$gte:50}}).pretty()
where likes >= 50
 
不等于
db.col.find({"likes":{$ne:50}}).pretty()
where likes != 50

大于 小於
db.col.find({"likes":{$gt:50,$lt:100}}).pretty()
where likes > 50

AND
> db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()

OR
>db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

AND 和 OR 联合使用
>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

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

db.col.find({"title" : {$type : 2}})  --获取 "col" 集合中 title 为 String 的数据
 
MongoDB Limit() 方法
 
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
 
语法

limit()方法基本语法如下所示:
 >db.COLLECTION_NAME.find().limit(NUMBER)

8、索引
0 0