一,MongoDB的啟動
mongod --dbpath=..\data\db
mongodb
注意同時開兩個窗口,不要關!
二, MongoDB的簡單使用
簡單介紹一下mongoDB中一些操作
show dbs: 顯示所有數據庫
show databases: 顯示所有數據庫
use xxxx: 使用指定數據庫/創建數據庫(新庫中插入數據才可以顯示新庫)
db: 當前正在使用的數據庫
db.dropDatabase(): 刪除數據庫 當前的
show collections: 顯示當前數據庫中所有的集合(表)
三, MongoDB的增刪改查
1. mongodb中常見的數據類型:
Object ID: 主鍵ID【"_id" : ObjectId("655e0fbb6b39977605602770")】
String: 字符串
Boolean: 布爾值
Integer: 數字
Doube: 小數
Arrays: 數組,[1,2,3]
Null : 空值
Timestamp: 時間戳
Date: 時間日期
2. mongodb插入數據/文檔
#collection_name集合/表不存在則會新建
db.collection_name.insert({字段:值,字段:值})
示例:
db.c1.insert({name:"bobo", age:18, hobby:['eat', 'sleep']})
db.users.insertOne({name: "John", age: 30, email: "john@example.com"})
db.users.insertOne({name: "John", age: 30})
插入多條數據:
#c1是表名/集合名
db.getCollection('c1').insertMany([{"name":"bobo",},{"address":"河北"},]
);db.c1.insertMany([{name: "Alice", age: 25, email: "alice@example.com"},{name: "Bob", age: 35, email: "bob@example.com"}
])
-
注意, 如果集合不存在. 則會自動創建集合
-
插入數據后可以查詢所有數據查看是否插入成功:
db.stu.find()
3. mongodb修改數據
3.1 update更新
#d1是表名
db.d1.update({查詢條件}, {待修改內容}, {multi: 是否多條數據修改})
multi:true表示修改滿足條件所有的內容,否則只修改滿足條件的第一條內容,multi不寫默認為false
示例:
db.d1.update({name:"bobo"}, {$set:{title:"alex", hobby:['抽煙', '喝酒', '燙頭']}}, {multi:true});
db.c1.update({name:"bobo"}, {$set:{title:"alex", hobby:['抽煙', '喝酒', '燙頭']}}, {multi:true});
db.users.updateOne({name: "John"}, {$set: {age: 31}})
db.users.updateMany({age: {$lt: 30}}, {$inc: {age: 1}})
4.mongodb刪除數據
4.1 remove()
db.collection_name.remove({條件}, {justOne:true|false})
db.collection_name.remove() 刪除所有記錄
db.collection_name.drop() 刪除collection/表
示例:
db.nor_col.remove({name:"jay"}, {justOne:true})
4.2 deleteOne()
db.collection_name.deleteOne({條件})
示例:
db.nor_col.deleteOne({name:"jay"})
db.users.deleteOne({name: "Alice"})
4.3 deleteMany()
db.collection_name.deleteMany({條件})
示例:
db.nor_col.deleteMany({name:"jay"})
db.users.deleteMany({age: {$gte: 40}})
5. mongodb查詢數據
準備數據:
db.stu.insert([{name: "朱元璋", age:800, address:'安徽省鳳陽', score: 160},{name: "朱棣", age:750, address:'江蘇省南京市', score: 120},{name: "朱高熾", age:700, address:'北京紫禁城', score: 90},{name: "李嘉誠", age:38, address:'香港xxx街道', score: 70},{name: "麻花藤", age:28, address:'廣東省xxx市', score: 80},{name: "大老王", age:33, address:'火星第一衛星', score: -60},{name: "咩咩", age:33, address:'開普勒225旁邊的黑洞', score: -160}
])
5.1 普通查詢
db.c1.find() 查詢所有
db.c1.find({"字段":"固定值"}) 查詢滿足條件的所有數據
db.c1.findOne({條件}) 查詢滿足條件的第一條數據
db.getCollection('c1').find({"字段1":"固定值1","字段2":"固定值2"})
db.users.find({name: "John"})
db.users.findOne({age: {$gt: 30}})
條件查詢:
使用邏輯與(AND)條件:
db.users.find({age: 30, city: "New York"})
使用邏輯或(OR)條件:
db.users.find({$or: [{age: 25}, {city: "London"}]})
使用比較操作符進行范圍查詢
db.users.find({age: {$gt: 30, $lt: 40}})
5.2 比較運算
等于: 默認是等于判斷, $eq
小于:$lt (less than)
小于等于:$lte (less than equal)
大于:$gt (greater than)
大于等于:$gte
不等于:$ne
db.stu.find({age:28}) 查詢年齡是28歲的學生信息
db.stu.find({age: {$eq: 28}}) 查詢年齡是28歲的學生信息
db.stu.find({age: {$gt: 30}}) 查詢年齡大于30歲的學生
db.stu.find({age: {$lt: 30}}) 查詢年齡小于30歲的學生
db.stu.find({age: {$gte: 38}}) 查詢年齡大于等于30歲的學生
db.stu.find({age: {$lte: 38}}) 查詢年齡小于等于30歲的學生
db.stu.find({age: {$ne: 38}}) 查詢年齡不等于38的學生
不用加“”
5.3 邏輯運算符
and
$and: [條件1, 條件2, 條件3…]
查詢年齡等于33, 并且, 名字是"大老王"的學生信息
db.stu.find({$and:[{age: {$eq:33}}, {name:'大老王'}]})
or
$or: [條件1, 條件2, 條件3]
查詢名字叫"李嘉誠"的, 或者, 年齡超過100歲的人
db.stu.find({$or: [{name: '李嘉誠'}, {age: {$gt: 100}}]})
nor
$nor: [條件1, 條件2, 條件3]
查詢年齡不小于38歲的人, 名字還不能是朱元璋.
db.stu.find({$nor: [{age: {$lt: 38}}, {name: "朱元璋"}]})
5.4 范圍運算符
? 使用$in, $nin判斷數據是否在某個數組內
db.stu.find({age: {$in:[28, 38]}}) 年齡是28或者38的人
5.5 正則表達式
? 使用$regex進行正則表達式匹配
db.stu.find({address: {$regex:'^北京'}}) 查詢地址是北京的人的信息
db.stu.find({address: /^北京/}) 效果一樣
db.users.find({name: /^J/})//類似js語法
5.6 skip和limit
db.stu.find().skip(3).limit(3)
跳過3個. 提取3個. 類似limit 3, 3 可以用來做分頁
5.7 排序
sort({字段:1, 字段:-1})
1表示升序
-1表示降序
對查詢結果排序, 先按照age升序排列, 相同項再按照score降序排列
db.stu.find().sort({age:1, score: -1})
5.8 統計數量
count(條件) 查詢數量
db.stu.count({age:33})
四,pymongo的使用
python處理mongodb首選就是pymongo. 首先, 安裝一下這個模塊
pip install pymongo
建立連接
import pymongoconn = pymongo.MongoClient(host='localhost', port=27017)
print(conn)
# 切換數據庫
py = conn['test']# 登錄該數據庫(需要的話)
# #py.authenticate("python_admin", '123456')
# 簡單來個查詢
# 查詢所有數據
result = py["stu"].find()
for r in result:print(r)
print(type(result))