Django之mongodb

一: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}});
})

你可能感兴趣的:(Mongodb)