为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB入门-增删改查操作

标签:
MongoDB
MongoDB
  • 数据库连接
    
    //username:password@hostname/dbname
    mongodb://admin:123456@localhost/

启动:
numactl --interleave=all /usr/local/mongodb/mongodb/bin/mongod --port 27017 --fork --dbpath=/usr/local/mongodb/mongodb_data/ --logpath=/usr/local/mongodb/mongodb_log/mongodb.log --logappend
关闭:

use admin;
db.shutdownServer();

http://pecl.php.net/get/mongodb-1.1.8.tgz


---
1. **db** 显示当前数据库对象或集合
2. **use dbname** 连接dbname数据库,如果没有该数据库则自动创建
3. **use dbname; db.dropDatabase()** 删除数据库
4. **show dbs** 查看所有数据库
5. **db.collection.drop()** 删除集合
---
* **插入文档**

db.col.insert({name:"菜鸟"})
db.col.insert({
title:'MongoDB',
by:'视频教程',
url:'http://www.runoob.com',
tag:['tag1','tag2','tag3'],
likes:100
})


---
* **查询**

//查看文档
db.col.find()
//方法以格式化的方式来显示
db.col.find().pretty()
//只查看一条
db.col.findOne();

//查看某几个字段
db.col.find({},{"name":1,"age":1});

* **条件查询**

操作  | 格式
---|---
等于 | {"key":"value"}
小于 | {"key":{$lt:number}}
小于等于 | {"key":{$lte:number}}
大于 | {"key":{$gt:number}}
大于等于 | {"key":{$gte:number}}
不等于 | {"key":{$ne:number}}
连用 | {"likes" : {$lt :200, $gt : 100}}

AND 条件

db.col.find({"key1":"value1","kay2":"value2"})


OR 条件

db.col.find({$or:[{"key1":"value1"},{"key2":"value2"}]})

db.col.find({$or:[{"title":"MongoDB"},{"name":"大菜鸟"}]})


AND OR 联合查询

db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
db.col.find({"title":"MongoDB",$or:[{"by":"runnoob"},{"by":"runnnnn"}]}).pretty()


按数据类型搜索

type  | 数字
---|---
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 
Max key |127

db.col.find({"title" : {$type : 2}})


limit 

//查询前10条
db.col.find().limit(10)
//跳过2条,查询10条
db.col.find().skip(2)


排序

1 为升序排列,而-1是用于降序排列

db.COLLECTION_NAME.find().sort({KEY:1})


聚合查询

数据

{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'w3cschool.cc',
url: 'http://www.w3cschool.cc',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: ObjectId(7df78ad8902d)
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'w3cschool.cc',
url: 'http://www.w3cschool.cc',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
_id: ObjectId(7df78ad8902e)
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
},


查询演示

//统计分组后,每组的数量
db.col.aggregate([{
$group:{
_id="$by_user",
num_turorial:{$sum:1}
}
}])

//分组后,统计分组数量,显示url组 $push 不过滤重复

db.col.aggregate([{
$group:{
_id:"$by_user",
count:{$sum:1},
url:{$push:"$url"}
}
}])

//分组后,,统计分组数量,显示url组 $addToSet 过滤重复 查询最大最小 likes

db.col.aggregate([{
$group:{
_id:"$by_user",
count:{$sum:1},
url:{$addToSet:"$url"},
MAX_likes:{$max:"$likes"},
MIN_likes:{$min:"$likes"}
}
}])

//获取分组后资源文档第一个文档数据

db.col.aggregate([{
$group:{
_id:"$by_user",
count:{$sum:1},
url:{$addToSet:"$url"},
MAX_likes:{$max:"$likes"},
MIN_likes:{$min:"$likes"},
first_url:{$first:"$url"},
last_url:{$last:"$url"}
}
}])


--- 

* **修改**

db.col.update({'name':'菜鸟'},{$set:{'name':'大菜鸟'}})
db.col.update({'title':'MongoDB'},{$set:{'by':'MongoDB教程'}})
db.col.update({'by':'MongoDB教程'},{$set:{'title':'MongoDB教程'}})

以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

db.col.update({'title':'MongoDB'},{$set:{'title':'大MongoDB'}},{multi:true})

覆盖已有文档(_id)
> 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 :可选,抛出异常的级别。

db.col.save({
"_id" : ObjectId("57b7f2decbaaa8c6888c266c"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})

---
插入已有文档
> db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

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

---
删除已有文档
> db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

> query :(可选)删除的文档的条件。

> justOne : (可选)如果设为 true 或 1,则只删除一个文档。

> writeConcern :(可选)抛出异常的级别。

//删除全部符合条件的数据
col.remove({'name':'runoob3'})
//只删除符合条件的第一条
col.remove({'name':'runoob3'},1)


---
索引

语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可

db.col.ensureIndex({"title":1})
db.col.ensureIndex({"title":1,"description":-1})

在后台创建索引:

db.values.ensureIndex({open: 1, close: 1}, {background: true})


---
数据存储

引用式关系

DBRef的形式:
{ $ref : , $id : , $db : }
三个字段表示的意义为:
$ref:集合名称
$id:引用的id
$db:数据库名称,可选参数

db.runoob.insert(d4)
WriteResult({ "nInserted" : 1 })

db.runoob.findOne({"_id":8})
{ "_id" : 8, "uses" : "sue", "info" : DBRef("sue_info", 1) }

db.runoob.findOne({"_id":8},{"info":1})
{ "_id" : 8, "info" : DBRef("sue_info", 1) }

var dbRef = db.runoob.findOne({"_id":8},{"info":1})
var ref = dbRef.info
print(ref)
DBRef("sue_info", 1)

db.runoob.findOne({"_id":(ref.$id)})

{
"_id" : 1,
"name" : "sue",
"age" : 19,
"type" : 1,
"status" : "P",
"favorites" : {
"artist" : "Picasso",
"food" : "pizza"
},
"finished" : [
17,
3
],
"badges" : [
"blue",
"black"
],
"points" : [
{
"points" : 85,
"bonus" : 20
},
{
"points" : 85,
"bonus" : 10
}
]
}

数据库数据为

d4={
"_id":8,
"uses":"sue",
"info":{
"$ref":"sue_info",
"$id":1
}

}

d1={
"_id" : 1,
"name" : "sue",
"age" : 19,
"type" : 1,
"status" : "P",
"favorites" : { "artist" : "Picasso", "food" : "pizza" },
"finished" : [ 17, 3 ],
"badges" : [ "blue", "black" ],
"points" : [ { "points" : 85, "bonus" : 20 }, { "points" : 85, "bonus" : 10 } ]
};

d2={
"_id" : 4,
"name" : "xi",
"age" : 34,
"type" : 2,
"status" : "D",
"favorites" : { "artist" : "Chagall", "food" : "chocolate" },
"finished" : [ 5, 11 ],
"badges" : [ "red", "black" ],
"points" : [ { "points" : 53, "bonus" : 15 }, { "points" : 51, "bonus" : 15 } ]
};

d3={
"_id" : 6,
"name" : "abc",
"age" : 43,
"type" : 1,
"status" : "A",
"favorites" : { "food" : "pizza", "artist" : "Picasso" },
"finished" : [ 18, 12 ],
"badges" : [ "black", "blue" ],
"points" : [ { "points" : 78, "bonus" : 8 }, { "points" : 57, "bonus" : 7 } ]
}

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
6
获赞与收藏
60

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消