一:mongodb(安装及基本操作)
1、安装(for mac)
brew install mongodb
2、创建数据存储文件夹(默认是/data/db)
sudo mkdir -p /data/db
修改文件夹权限
chmod 666 data
chomd 666 db
3、启动服务端
mongod
4、启动客户端
mongo
5、一些简单的操作
use database(数据库名)
如果数据库不存在,则创建数据库,否则切换到指定数据库。
show dbs
查看所有的数据库
db.table(集合名).insert({"key":"value"})
插入数据
db.table(集合名).find().pretty()
查看数据
use database(数据库名)
db.dropDatabase()
删除数据库(需先切换到想要删除的数据库再执行上面的命令)
use database(库名)
show tables
or
show collections
查看集合(表)
db.table(表名).drop()
删除集合(mysql中的表,mongodb里叫集合)
db.createCollection(name, options)
创建集合
例:
db.createCollection('news', { capped : true, autoIndexId : true, size :
6142800, max : 10000 })
创建了一个名为news的集合整个集合空间大小 6142800 KB, 文档最大个数为 10000 个
参数:
capped(布尔):(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
autoIndexId(布尔):(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size(数值):(可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。
max(数值):(可选)指定固定集合中包含文档的最大数量。
二:Django操作mongodb
1、安装包
pip3 install mongoengine
2、settings文件配置
DATABASES = {
# mysql配置
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'sysj',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'USER': 'root',
'PORT': 3306,
},
# gmongodb配置
'News(库名)': {
'ENGINE': None
}
}
# 连接mongodb数据库
from mongoengine import connect
connect('News', host='39.107.85.8', port=27017)
3、在models.py里创建模型类
from mongoengine import *
class NewsModel(Document):
# 定义数据库中的所有字段
title = StringField()
details = StringField()
like = StringField()
comment = StringField()
# 指明连接的数据表名
meta = {'collection': 'NewsModel'}
4、创建序列化器(在serializers.py里)
from rest_framework import serializers
from .models import NewsModel
注意继承关系(mysql的继承关系是:serializers.ModelSerializer)
class NewsSerializer(serializers.Serializer):
"""
关注的企业序列化器
"""
id = serializers.CharField()
title = serializers.CharField()
details = serializers.CharField()
like = serializers.CharField()
comment = serializers.CharField()
class Meta:
model = NewsModel
fields = '__all__'
5、在views.py里实现增删改查
from django.shortcuts import render
# Create your views here.
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from . import serializers
from .models import NewsModel
class CreateView(GenericAPIView):
# 指定序列化器
serializer_class = serializers.NewsSerializer
# 增
def post(self, request):
title = request.data.get('title', None)
details = request.data.get('details', None)
like = request.data.get('like', None)
comment = request.data.get('comment', None)
result = NewsModel(title=title, details=details, like=like, comment=comment)
result.save()
return Response({'msg: ok'})
# 查
def get(self, request):
id = request.GET.get('id', None)
result = NewsModel.objects.filter(id=id).all()
serializer = self.get_serializer(result, many=True)
return Response(data=serializer.data)
# 改
def put(self, request):
id = request.data.get('id', None)
details = request.data.get('details', None)
NewsModel.objects.filter(id=id).update(details=details)
return Response({'msg': 'ok'})
# 删
def delete(self, request):
id = request.GET.get('id', None)
NewsModel.objects.filter(id=id).delete()
return Response({'msg': 'ok'})
去重命令:
db.userInfo.aggregate([
{
$group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
},
{
$match: {count: {$gt: 1}}
}
]).forEach(function(doc){
doc.dups.shift();
db.userInfo.remove({_id: {$in: doc.dups}});
})