需求闡述:
下面是一張我們存儲到mongodb數據庫中的數據格式,我們的需求是使用orm的方式將新的評論數據插入的某條文章的review子集合中去。
解決方法:
兩個model對應的是上面json,Review是Article的嵌套子集合,我們需要把新的評論數據插入到子集中去
class Review(EmbeddedDocument):
name = StringField(max_length=255, required=True)
image = StringField(max_length=255, required=True)
time = DateTimeField( default=datetime.datetime.now,required=True)
content = StringField(max_length=255, required=True)
good = IntField(default=0, required=True)
reply = StringField(max_length=255, required=True)
other = StringField(max_length=255, required=True)
class Article(Document):
title = StringField(max_length=255, required=True)
text = StringField(max_length=255, required=True)
url = StringField(max_length=255, required=True)
time = DateTimeField(default=datetime.datetime.now,required=True)
image = StringField(max_length=255, required=True)
type = StringField(max_length=255, required=True)
publisher = IntField(default=0, required=True)
review = ListField(EmbeddedDocumentField(Review))
1.插入數據
- 使用mongo語句操作:
db.article.update(
{_id:ObjectId("5e58f565ab74fbfd66cc5df5")},
{$push:
{review:
{"name":"大傻子","image":"/static/url/xxx","time":"2012-12-26","content":"哈哈哈哈","good":20,"reply":[],"other":[]
}
}
}
)
- 使用ORM語法:
Article.objects(id="5e58f565ab74fbfd66cc5df5").update_one(push__review={"name":"大傻子","image":"/static/url/xxx","time":"2019-12-26","content":"嘻嘻嘻","good":20,"reply":"","other":""})
2.刪除數據
- 使用mongo語法操作:
db.article.remove({_id:ObjectId("5e58f565ab74fbfd66cc5df5"),"review._id":1})
- 使用ORM語法
Article.objects(id="5e58f565ab74fbfd66cc5df6").update_one(pull__review__other=1)
3.其他
# 查詢文章評論
Article.objects.get(id="5e58f565ab74fbfd66cc5df5").review
# 批量插入
for i in range(10):
Article.objects(id="5e58f565ab74fbfd66cc5df6").update_one(push__review={"name":"大傻子","image":"/static/url/xxx","time":"2019-12-26","content":"嘻嘻嘻","good":"","feel":1,"other":i})
# 刪除文章的子集中評論other等於3的數據
Article.objects(id="5e58f565ab74fbfd66cc5df6").update_one(pull__review__other=3)
# 將評論數據的對象轉化爲json形式
reviews = [r.to_json() for r in Article.objects(id="5e58f565ab74fbfd66cc5df6")[0].review]
reviews = []
# 批量查詢文章評論子集並進行修改存儲到列表
for r in Article.objects(id="5e58f565ab74fbfd66cc5df6")[0].review:
review = r.to_mongo()
time = review["time"].strftime('%Y{y}%m{m}%d{d} %H:%M').format(y='年', m='月', d='日')
review.update({"time":time})
reviews.append(dict(review))
print(reviews)
# 修改數據庫的某一個字段
a= Article.objects(id="5e58f565ab74fbfd66cc5df6")[0]
a.views=1
a.save()