Mongo shell 的基本操作
MongoDB 分四级存储:
1、数据库 db
2、文档集合 collections(相当于 MySQL 的数据库表)
3、文档 document(相当于 MySQL 数据库表里的一条数据)
4、字段
首先启动 mongo 服务:
shiyanlou:~/ $ sudo service mongod start
* Starting database mongod
shiyanlou:~/ $
执行 mongo
或 sudo mongo
进入到 mongo shell ,
执行 use <数据库名称>
即可切换到此数据库,
若此数据库不存在,该命令并不会创建这个数据库,
当执行 db.<文档集合名称>.insertOne
创建了一条数据时,
该数据库和文档集合才真正创建:
shiyanlou:~/ $ mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Server has startup warnings:
2018-02-19T12:47:00.461+0800 I STORAGE [initandlisten]
2018-02-19T12:47:00.461+0800 I STORAGE [initandlisten]
... ...
2018-02-19T12:47:00.816+0800 I CONTROL [initandlisten]
2018-02-19T12:47:00.816+0800 I CONTROL [initandlisten]
2018-02-19T12:47:00.816+0800 I CONTROL [initandlisten]
> show databases
admin 0.000GB
local 0.000GB
> use shiyanlou
switched to db shiyanlou
> show databases
admin 0.000GB
local 0.000GB
> db.user.insertOne(
... {name: 'Kobe', age: 39, addr: ['Los', 'Tor']}
... )
{
"acknowledged" : true,
"insertedId" : ObjectId("5a8a6511f04f005f97780c8c")
}
> show databases
admin 0.000GB
local 0.000GB
shiyanlou 0.000GB
>
插入多条数据:
> db.user.insertMany([
... {name: 'Nash', age: 43, addr: ['Pho', 'Los']},
... {name: 'Jame', age: 33, addr: ['Mia', 'Cle']}
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5a8a677ff04f005f97780c8d"),
ObjectId("5a8a677ff04f005f97780c8e")
]
}
>
查询数据可以使用 db.collection.find 方法,可以指定查询过滤条件:
> db.user.find() # findOne() 可以查询第一条数据
{ "_id" : ObjectId("5a8a6511f04f005f97780c8c"), "name" : "Kobe", "age" : 39, "addr" : [ "Los", "Tor" ] }
{ "_id" : ObjectId("5a8a677ff04f005f97780c8d"), "name" : "Nash", "age" : 43, "addr" : [ "Pho", "Los" ] }
{ "_id" : ObjectId("5a8a677ff04f005f97780c8e"), "name" : "Jame", "age" : 33, "addr" : [ "Mia", "Cle" ] }
> db.user.find({name: 'Kobe'})
{ "_id" : ObjectId("5a8a6511f04f005f97780c8c"), "name" : "Kobe", "age" : 39, "addr" : [ "Los", "Tor" ] }
> db.user.find({age: {$gt: 35}}) # gt 表示大于,lt 表示小于
{ "_id" : ObjectId("5a8a6511f04f005f97780c8c"), "name" : "Kobe", "age" : 39, "addr" : [ "Los", "Tor" ] }
{ "_id" : ObjectId("5a8a677ff04f005f97780c8d"), "name" : "Nash", "age" : 43, "addr" : [ "Pho", "Los" ] }
>
更新数据主要通过 db.user.updateOne
或者 db.user.updateMany
方法,
前者更新一条记录,后者更新多条记录:
> db.user.updateOne(
... {name: 'Nash'},
... {$set: {addr: ['Pho', 'Dal', 'Los']}}
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.user.find({name: 'Nash'})
{ "_id" : ObjectId("5a8a677ff04f005f97780c8d"), "name" : "Nash", "age" : 43, "addr" : [ "Pho", "Dal", "Los" ] }
>
删除数据通过 db.user.deleteOne
(默认删除第一条符合条件的数据)
或db.user.deleteMany
(默认删除全部符合条件的数据)方法:
> db.user.find()
{ "_id" : ObjectId("5a8a6511f04f005f97780c8c"), "name" : "Kobe", "age" : 39, "addr" : [ "Los", "Tor" ] }
{ "_id" : ObjectId("5a8a677ff04f005f97780c8d"), "name" : "Nash", "age" : 43, "addr" : [ "Pho", "Dal", "Los" ] }
{ "_id" : ObjectId("5a8a677ff04f005f97780c8e"), "name" : "Jame", "age" : 33, "addr" : [ "Mia", "Cle" ] }
> db.user.deleteMany({addr: 'Los'})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.user.find()
{ "_id" : ObjectId("5a8a677ff04f005f97780c8e"), "name" : "Jame", "age" : 33, "addr" : [ "Mia", "Cle" ] }
>
删除数据还可以用 db.collection.remove
方法,
它默认删除所有符合条件的数据,此命令可以删除全部数据:
> db.user.find()
{ "_id" : ObjectId("5a8a6d13f04f005f97780c94"), "name" : "Kobe", "age" : 33 }
{ "_id" : ObjectId("5a8a6d13f04f005f97780c95"), "name" : "Nash", "age" : 33 }
> db.user.remove({}) # 删除全部数据
WriteResult({ "nRemoved" : 2 })
> db.user.find()
>
在数据库中删除文档集合(也就是数据库表):
> show collections # 查看该数据库中的文档集合
user
> db.user.drop()
true
> show collections
> show databases # 如果删除的是该数据库最后一个 collection ,那么这个数据库也就不存在了
admin 0.000GB
local 0.000GB
>
在某数据库中删除此数据库:
> show databases
admin 0.000GB
local 0.000GB
shiyanlou 0.000GB
> use shiyanlou
switched to db shiyanlou
> db.dropDatabase()
{ "dropped" : "shiyanlou", "ok" : 1 }
> show databases
admin 0.000GB
local 0.000GB
>
Python shell 中使用 MongoDB
在 Python 中访问 MongoDB 数据库,主要通过 PyMongo
软件包。
该软件包包含一个 MongoClient
对象,可以用于建立 MongoDB 客户端。
在 ipython 中输入下面的示例代码,创建客户端:
shiyanlou:~/ $ ipython
Python 3.5.3 (default, Apr 22 2017, 00:00:00)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from pymongo import MongoClient
In [2]: client = MongoClient('127.0.0.1', 27017)
In [3]: db = client.shiyanlou # db 就是指 shiyanlou 数据库
In [4]:
查询数据:
# 默认查询全部符合条件的数据
In [4]: for i in db.user.find():
...: print(i)
...:
{'age': 33.0, '_id': ObjectId('5a8a76f597407582a38e58b0'), 'name': 'Kobe', 'addr': 'Los'}
{'age': 32.0, '_id': ObjectId('5a8a76f597407582a38e58b1'), 'name': 'Jame', 'addr': 'Cle'}
{'age': 31.0, '_id': ObjectId('5a8a76f597407582a38e58b2'), 'name': 'Wade', 'addr': 'Mim'}
In [5]:
插入数据:
# 插入一条数据
In [6]: db.user.insert_one(
...: {'name':'Irving', 'age': 29, 'addr': 'Bos'}
...: )
Out[6]: <pymongo.results.InsertOneResult at 0x7f17660e7ca8>
# 查询一条数据
In [7]: db.user.find_one({'name':'Irving'})
Out[7]:
{'_id': ObjectId('5a8a77cbf411f101fd16a7ef'),
'addr': 'Bos',
'age': 29,
'name': 'Irving'}
In [8]:
更新数据:
In [11]: db.user.find_one({'name': 'Kobe'})
Out[11]:
{'_id': ObjectId('5a8a76f597407582a38e58b0'),
'addr': 'Los',
'age': 33.0,
'name': 'Kobe'}
# 更新一条数据
In [12]: db.user.update_one({'name':'Kobe'}, {'$set': {'age': 39}})
Out[12]: <pymongo.results.UpdateResult at 0x7f176c2309d8>
In [13]: db.user.find_one({'name': 'Kobe'})
Out[13]:
{'_id': ObjectId('5a8a76f597407582a38e58b0'),
'addr': 'Los',
'age': 39,
'name': 'Kobe'}
In [14]:
删除一条数据:
In [13]: db.user.find_one({'name': 'Kobe'})
Out[13]:
{'_id': ObjectId('5a8a76f597407582a38e58b0'),
'addr': 'Los',
'age': 39,
'name': 'Kobe'}
In [14]: db.user.delete_one({'name': 'Kobe'})
Out[14]: <pymongo.results.DeleteResult at 0x7f17660e7ea0>
In [15]: db.user.find_one({'name': 'Kobe'})
In [16]: