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();

---

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(

,

,

{

upsert: ,

multi: ,

writeConcern:

}

)

> 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(

,

{

justOne: ,

writeConcern:

}

)

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

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

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

---

删除已有文档

> db.collection.remove(

,

{

justOne: ,

writeConcern:

}

)

> 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 } ]

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值