MongoEngine 使用教程(一)

MongoEngine是MongoDB的一個ODM(Object-Document Mapper)框架,它提供了類似Django的語法來操作MongoDB數據庫

1.安裝:

pip install mongoengine

2.定義類:

import random
from mongoengine import *
​
connect(host="mongodb://localhost:27017/", connect=False)  # 需要有默認連接
connect(host="mongodb://localhost:27017/userInfo", alias="userInfo", connect=False)
​​
class UserInfo(DynamicDocument):
    """
    用戶遊戲任務相關信息
    """
    uid = SequenceField(primary_key=True)  # 自增id
    create_time = StringField(max_length=100)  # 賬號創建時間
    device_id = StringField(max_length=100)  # 設備id
    city = StringField(max_length=50)  # 城市
    gender = IntField()  # 性別
    province = StringField(max_length=50)  # 省份
    country = StringField(max_length=50)  # 國家
    headimg = StringField(max_length=200)  # 頭像
    role = StringField(max_length=100)  # 用戶身份
    nick_name = StringField(max_length=100)  # 暱稱
    phone = StringField(max_length=100)  # 手機號
    real_name = StringField(max_length=100)  # 真名
    id_card = StringField(max_length=200)  # 身份證號
    # shard_key 爲分片key,在使用mongo分片集羣的時候需要配置並且在項目首次上線之前在mongo中手動聲明分片庫和分片集合
    meta = {"collection": "userInfo", "db_alias": "userInfo", "shard_key": ("uid",)}

3.插入數據

import time
​
user = UserInfo(create_time=time.strftime("%Y-%m-%d %H:%M:%S"), device_id="21c267a9-c04d-38de-a0c0-641366ed5e43")
user.country = "中國"
user.city = "北京"
user.age = 18
user.save()
# 插入後的示例數據 主鍵uid在mongo中爲_id
# { "_id" : 1, "create_time" : "2020-03-04 09:06:28", "device_id" : "21c267a9-c04d-38de-a0c0-641366ed5e43", "city" : "北京", "country" : "中國",age: 18 }

4.查詢數據

# 查單條數據,如果沒有會報錯
user = UserInfo.objects.get(_id=1)
print(user.uid, user.country, user.city)
# 查詢多條,返回列表,如果沒有數據返回空列表
user = UserInfo.objects(_id=1)
for i in user:
    print(i.uid, i.country, i.city)
# 操作符格式 字段__操作符=查詢條件
# 創建時間大於2020-03-04 12:07:04的數據
user = UserInfo.objects(create_time__gte="2020-03-04 12:07:04")
for i in user:
    print(i.uid, i.country, i.city)  
'''
常用操作符
* ne 不等於  age__ne=18
* gt(e) 大於(等於) create_time__gte="2020-03-04 12:07:04"
* lt(e) 小於(等於) create_time__lte="2020-03-04 12:07:04"
* not 對操作符取反,比如 age__not__gt=18
* in 後面是一個列表,比如 city__in=["北京","上海"],找出這兩個城市的數據,若都不存在,返回空列表。
* nin in取反  age__nin=[18]
* mod 取模,比如 age__mod=(2,0) 表示查詢出age除以2,餘數是0的數據
'''
# 通過Q對象查詢多個條件 |或,& 與
from mongoengine.queryset.visitor import Q
user = UserInfo.objects(Q(city="北京")|Q(age=17))
for i in user:
    print(i.uid, i.country, i.city, getattr(i, "age", 0))

5.修改數據

user = UserInfo.objects.get(_id=1)
user.age = 20  # 修改年齡
user.nick_name = "test"  #增加暱稱字段
user.save()

6.刪除

user = UserInfo.objects(_id="10270521").delete()

請關注我的公衆號:每天學一點it知識

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章