MongoDB基本操作

MongoDB是目前一款很受欢迎的NoSql数据库。具体的优点可自行Google。下面我们介绍一下这款非关系型数据库的基本操作。

注意点:

  1. MongoDB中没有表的概念,其中的集合(collection)相当于关系型数据库中的表。
  2. MongoDB的语法不需要以;作为结束。

默认登录MongoDB

1
2
3
4
# 启动mongodb服务
$ brew services start mongodb
# 连接mongodb
$ mongo --host localhost --port 27017

显示所有数据库

1
show databases或show db

切换数据库

1
2
use db_name
PS: 数据库存在时切换到指定数据库,不存在时MongoDB会自动创建。

删除数据库

1
2
use db_name
db.dropDatabase()

显示指定数据库中的所有集合

1
show collections

删除collection

1
db.collection_name.drop()

示例:删除restaurants集合

1
db.restaurants.drop()

插入数据

1
db.collection_nae.insert(Json数据)

示例:向restaurants集合中插入数据

PS: 插入数据时, 如果集合不存在,MongoDB会自动创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
db.restaurants.insert(
{
"address" : {
"street" : "2 Avenue",
"zipcode" : "10075",
"building" : "1480",
"coord" : [ -73.9557413, 40.7720266 ]
},
"borough" : "Manhattan",
"cuisine" : "Italian",
"grades" : [
{
"date" : ISODate("2014-10-01T00:00:00Z"),
"grade" : "A",
"score" : 11
},
{
"date" : ISODate("2014-01-16T00:00:00Z"),
"grade" : "B",
"score" : 17
}
],
"name" : "Vella",
"restaurant_id" : "41704620"
}
)

查询指定集合中所有记录

1
db.collection_name.find()

示例:查询restaurants集合中的所有数据

1
db.restaurants.find()

单条件查询

1
db.collection_name.find(json格式的条件数据)

示例:查询restaurants集合中borough的值为“Manhattan”的所有数据

1
db.restaurants.find({"borough": "Manhattan"})

示例:查询restaurants集合中grades数组中grade成绩为“A”的所有数据

1
db.restaurants.find({"grades.grade": "A"})

示例:查询restaurants集合中grades数组中score大于30的所有数据

1
db.restaurants.find({ "grades.score": { $gt: 30 } } )

示例:查询restaurants集合中grades数组中score小于10的所有数据

1
db.restaurants.find( { "grades.score": { $lt: 10 } } )

组合条件查询

1
2
3
4
5
And条件查询:
db.collection_name.find(Json格式的条件)

Or条件查询:
db.collection_name.find({$or: [{条件一}, {条件二}, ...]})

示例:查询restaurants集合中cuisine等于”Italian”且address.zipcode等于“10075”的所有数据

1
db.restaurants.find( { "cuisine": "Italian", "address.zipcode": "10075" } )

示例:查询restaurants集合中cuisine等于”Italian”或address.zipcode等于“10075”的所有数据

1
2
3
db.restaurants.find(
{ $or: [ { "cuisine": "Italian" }, { "address.zipcode": "10075" } ] }
)

查询结果排序

1
2
字段值为1表示升序, 字段值为-1表示将序
db.collection_name.find().sort(Json格式的排序字段)

按照borough升序的方式对数据进行排序

1
db.restaurants.find().sort( { "borough": 1} )

更新数据

1
2
db.collection_name.update({更新条件}, {需要更新的数据})
注意:默认一次只能更新一条记录

示例:更新name等于“Juni”的单条数据

1
2
3
4
5
6
7
db.restaurants.update(
{ "name" : "Juni" },
{
$set: { "cuisine": "American (New)" },
$currentDate: { "lastModified": true }
}
)

示例:更新name等于“Juni”的所有数据

1
2
3
4
5
6
7
8
db.restaurants.update(
{ "name" : "Juni" },
{
$set: { "cuisine": "American (New)" },
$currentDate: { "lastModified": true }
},
{ multi: true}
)

示例:更新restaurant_id等于“41704620”的整条记录

1
2
3
4
5
6
7
8
9
10
11
12
db.restaurants.update(
{ "restaurant_id" : "41704620" },
{
"name" : "Vella 2",
"address" : {
"coord" : [ -73.9557413, 40.7720266 ],
"building" : "1480",
"street" : "2 Avenue",
"zipcode" : "10075"
}
}
)

删除指定数据

1
db.collection_name.remove(Json格式的条件)

示例:删除borough等于“Manhattan”的记录

1
db.restaurants.remove( { "borough": "Manhattan" } )

删除所有数据

1
db.collection_name.remove( { } )

示例:删除borough等于“Manhattan”的记录

1
db.restaurants.remove( { } )
,