首页 > 数据库技术 > 详细

MongoDB-Manual-Master 读书笔记-CRUD操作

时间:2016-01-05 01:39:16      阅读:486      评论:0      收藏:0      [点我收藏+]

3.1 MongoDB CRUD介绍

从网址

https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/dataset.json 下载示例文件

使用如下命令导入MongoDB,数据库test 集合名restaurants 。

[root@localhost ~]# mongoimport --db test --collection restaurants --drop --file dataset.txt 
2016-01-04T20:16:05.541+0800connected to: localhost
2016-01-04T20:16:05.543+0800dropping: test.restaurants
2016-01-04T20:16:08.362+0800imported 25359 documents

使用mongo客户端程序连接MongoDB

[root@localhost ~]# mongo
MongoDB shell version: 3.2.0
connecting to: test

默认连接到test数据库,可以使用use命令切换数据库(指定的数据库没有时,则创建)

> use test_db
switched to db test_db


mongodb启动时默认监听的IP地址为127.0.0.1 如果需要网络访问mongodb,则修改配置文件/etc/mongod.conf 

# network interfaces
net:
  port: 27017
  bindIp: 192.168.199.219


前面讲过MongoDB使用文档结构来存储数据,文档是一张类JSON的格式。严格来说,MongoDB使用BSON来存储数据,BSON是JSON的二进制表现形式。

所有的文档存在一个称之为Collections中,一个collection由一组相关的文档组成。你可以把collection看成关系数据库的表。

技术分享

3.1.1 数据库操作

Query

MongoDB中使用db.collection.find()检索数据,collection表示具体的集合的名称。

此方法接受两个参数:查询条件、查询结果列(数据映射),并且返回一个cursor 。

技术分享

上图表示在users集合中查询条件满足age>=18的,并且返回name,address列,返回结果只取5行数据。

projection部分,如果指定{name:0}则表示除去name的所有列。


其对应的SQL写法为:

技术分享


db.collection.findOne()则只返回第一条数据

示例:

> db.restaurants.findOne()
{
	"_id" : ObjectId("568a628607ce6e1e3c2e0a25"),
	"address" : {
		"building" : "1007",
		"coord" : [
			-73.856077,
			40.848447
		],
		"street" : "Morris Park Ave",
		"zipcode" : "10462"
	},
	"borough" : "Bronx",
	"cuisine" : "Bakery",
	"grades" : [
		{
			"date" : ISODate("2014-03-03T00:00:00Z"),
			"grade" : "A",
			"score" : 2
		},
		{
			"date" : ISODate("2013-09-11T00:00:00Z"),
			"grade" : "A",
			"score" : 6
		},
		{
			"date" : ISODate("2013-01-24T00:00:00Z"),
			"grade" : "A",
			"score" : 10
		},
		{
			"date" : ISODate("2011-11-23T00:00:00Z"),
			"grade" : "A",
			"score" : 9
		},
		{
			"date" : ISODate("2011-03-10T00:00:00Z"),
			"grade" : "B",
			"score" : 14
		}
	],
	"name" : "Morris Park Bake Shop",
	"restaurant_id" : "30075445"
}

查询address.building = 1008的

> db.restaurants.findOne({"address.building":"1008"})
{
	"_id" : ObjectId("568a628607ce6e1e3c2e0b1b"),
	"address" : {
		"building" : "1008",
		"coord" : [
			-73.9668354,
			40.7568328
		],
		"street" : "2 Avenue",
		"zipcode" : "10022"
	},
	"borough" : "Manhattan",
	"cuisine" : "French",
	"grades" : [
		{
			"date" : ISODate("2014-02-04T00:00:00Z"),
			"grade" : "A",
			"score" : 11
		},
		{
			"date" : ISODate("2013-04-10T00:00:00Z"),
			"grade" : "A",
			"score" : 7
		},
		{
			"date" : ISODate("2012-02-27T00:00:00Z"),
			"grade" : "A",
			"score" : 10
		},
		{
			"date" : ISODate("2011-11-02T00:00:00Z"),
			"grade" : "A",
			"score" : 4
		},
		{
			"date" : ISODate("2011-07-11T00:00:00Z"),
			"grade" : "A",
			"score" : 9
		},
		{
			"date" : ISODate("2011-03-07T00:00:00Z"),
			"grade" : "C",
			"score" : 39
		}
	],
	"name" : "La Mangeoire",
	"restaurant_id" : "40368971"
}

只选择grades字段

> db.restaurants.findOne({"address.building":"1008"},{"grades":1})
{
	"_id" : ObjectId("568a628607ce6e1e3c2e0b1b"),
	"grades" : [
		{
			"date" : ISODate("2014-02-04T00:00:00Z"),
			"grade" : "A",
			"score" : 11
		},
		{
			"date" : ISODate("2013-04-10T00:00:00Z"),
			"grade" : "A",
			"score" : 7
		},
		{
			"date" : ISODate("2012-02-27T00:00:00Z"),
			"grade" : "A",
			"score" : 10
		},
		{
			"date" : ISODate("2011-11-02T00:00:00Z"),
			"grade" : "A",
			"score" : 4
		},
		{
			"date" : ISODate("2011-07-11T00:00:00Z"),
			"grade" : "A",
			"score" : 9
		},
		{
			"date" : ISODate("2011-03-07T00:00:00Z"),
			"grade" : "C",
			"score" : 39
		}
	]
}

显示除了grades的其他字段

> db.restaurants.findOne({"address.building":"1008"},{"grades":0})
{
	"_id" : ObjectId("568a628607ce6e1e3c2e0b1b"),
	"address" : {
		"building" : "1008",
		"coord" : [
			-73.9668354,
			40.7568328
		],
		"street" : "2 Avenue",
		"zipcode" : "10022"
	},
	"borough" : "Manhattan",
	"cuisine" : "French",
	"name" : "La Mangeoire",
	"restaurant_id" : "40368971"

查询zipcode=10022 并且cuisine="French"的

> db.restaurants.findOne({"address.zipcode":"10022","cuisine":"French"})
{
	"_id" : ObjectId("568a628607ce6e1e3c2e0a85"),
	"address" : {
		"building" : "3",
		"coord" : [
			-73.97557069999999,
			40.7596796
		],
		"street" : "East   52 Street",
		"zipcode" : "10022"
	},
	"borough" : "Manhattan",
	"cuisine" : "French",
	"grades" : [
		{
			"date" : ISODate("2014-04-09T00:00:00Z"),
			"grade" : "A",
			"score" : 10
		},
		{
			"date" : ISODate("2013-03-05T00:00:00Z"),
			"grade" : "A",
			"score" : 9
		},
		{
			"date" : ISODate("2012-02-02T00:00:00Z"),
			"grade" : "A",
			"score" : 13
		}
	],
	"name" : "La Grenouille",
	"restaurant_id" : "40365264"
}

查询zipcode=10022 或者 cuisine="French"的

> db.restaurants.findOne({"$or":[{"address.zipcode":"10022"},{"cuisine":"French"}]})
{
	"_id" : ObjectId("568a628607ce6e1e3c2e0a51"),
	"address" : {
		"building" : "437",
		"coord" : [
			-73.975393,
			40.757365
		],
		"street" : "Madison Avenue",
		"zipcode" : "10022"
	},
	"borough" : "Manhattan",
	"cuisine" : "American ",
	"grades" : [
		{
			"date" : ISODate("2014-06-03T00:00:00Z"),
			"grade" : "A",
			"score" : 9
		},
		{
			"date" : ISODate("2013-06-07T00:00:00Z"),
			"grade" : "A",
			"score" : 5
		},
		{
			"date" : ISODate("2012-06-29T00:00:00Z"),
			"grade" : "A",
			"score" : 12
		},
		{
			"date" : ISODate("2012-02-06T00:00:00Z"),
			"grade" : "A",
			"score" : 11
		},
		{
			"date" : ISODate("2011-06-23T00:00:00Z"),
			"grade" : "A",
			"score" : 13
		}
	],
	"name" : "Berkely",
	"restaurant_id" : "40363685"
}

查询grades.score大于13的

> db.restaurants.findOne({"grades.score":{"$gt":13}})
{
	"_id" : ObjectId("568a628607ce6e1e3c2e0a25"),
	"address" : {
		"building" : "1007",
		"coord" : [
			-73.856077,
			40.848447
		],
		"street" : "Morris Park Ave",
		"zipcode" : "10462"
	},
	"borough" : "Bronx",
	"cuisine" : "Bakery",
	"grades" : [
		{
			"date" : ISODate("2014-03-03T00:00:00Z"),
			"grade" : "A",
			"score" : 2
		},
		{
			"date" : ISODate("2013-09-11T00:00:00Z"),
			"grade" : "A",
			"score" : 6
		},
		{
			"date" : ISODate("2013-01-24T00:00:00Z"),
			"grade" : "A",
			"score" : 10
		},
		{
			"date" : ISODate("2011-11-23T00:00:00Z"),
			"grade" : "A",
			"score" : 9
		},
		{
			"date" : ISODate("2011-03-10T00:00:00Z"),
			"grade" : "B",
			"score" : 14
		}
	],
	"name" : "Morris Park Bake Shop",
	"restaurant_id" : "30075445"
}

Insert

MongoDB中使用如下方法插入数据

db.collection.insertOne()

db.collection.insertMany()

db.collection.insert()


db.collection.insertOne() 3.2 新增方法

技术分享上图表示往users集合中插入一个文档

与如下图中的SQL语句等效

技术分享

> db.users.insertOne({
... name:"dinglq",
... age:26
... ,status:"A",
... groups:["news","sports"]
... })
{
"acknowledged" : true,
"insertedId" : ObjectId("568a84a5a3e3eabd25b468af")
}


db.collection.insertMany() 是3.2版本新增功能,一次插入多个文档

技术分享

> db.users.insertMany([
{name:"dinglq", age:26 ,status:"A", groups:["news","sports"]}, 
{name:"zhangdd",age:30,status:"B"}, 
{name:"vincent",age:44}])

{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("568a85ada3e3eabd25b468b0"),
		ObjectId("568a85ada3e3eabd25b468b1"),
		ObjectId("568a85ada3e3eabd25b468b2")
	]
}


db.collection.insert() 向集合中添加一个文档,或者一组文档。


技术分享


update

db.collection.updateOne()

db.collection.updateMany()

db.collection.replaceOne()

db.collection.update()


db.collection.updateOne() 3.2新增方法,只更新目中数据的第一条


技术分享

更新users集合,条件是age<=18,将status的值改为reject 。

该语句等价于如下sql

技术分享

> db.users.updateOne({name:"dinglq"},{"$set":{"age":36}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.users.find({name:"dinglq"})
{ "_id" : ObjectId("568a84a5a3e3eabd25b468af"), "name" : "dinglq", "age" : 36, "status" : "A", "groups" : [ "news", "sports" ] }
{ "_id" : ObjectId("568a85ada3e3eabd25b468b0"), "name" : "dinglq", "age" : 26, "status" : "A", "groups" : [ "news", "sports" ] }
> db.users.updateMany({name:"dinglq"},{"$inc":{"age":4}})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
> db.users.find({name:"dinglq"})
{ "_id" : ObjectId("568a84a5a3e3eabd25b468af"), "name" : "dinglq", "age" : 40, "status" : "A", "groups" : [ "news", "sports" ] }
{ "_id" : ObjectId("568a85ada3e3eabd25b468b0"), "name" : "dinglq", "age" : 30, "status" : "A", "groups" : [ "news", "sports" ] }


db.collection.updateMany() 3.2新增方法,更新命中的所有文档

技术分享


db.collection.replaceOne() 3.2新增方法,使用新指定的文档替换命中的第一个文档

技术分享




本文出自 “叮咚” 博客,请务必保留此出处http://lqding.blog.51cto.com/9123978/1731529

MongoDB-Manual-Master 读书笔记-CRUD操作

原文:http://lqding.blog.51cto.com/9123978/1731529

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!