Mongo shell 的基本操作和 Python shell 中使用 MongoDB

Mongo shell 的基本操作

MongoDB 分四级存储:
1、数据库 db
2、文档集合 collections(相当于 MySQL 的数据库表)
3、文档 document(相当于 MySQL 数据库表里的一条数据)
4、字段

首先启动 mongo 服务:

shiyanlou:~/ $ sudo service mongod start
 * Starting database mongod
shiyanlou:~/ $ 

执行 mongosudo 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]: 
    原文作者:Manchangdx
    原文地址: https://www.jianshu.com/p/26b00712f16e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞