这里我好好的来说一下如何安装Mongodb数据库,曾经自己是被坑惨了的,所以现在就把怎么实现的来进行讲解一下,免得和自己一样走那么多的弯路。
(1)首先从官网去下一个MongoDB,这个没什么好说,就是找到符合自己电脑的版本就好了
(2)在下好了之后,傻瓜式的安装,指定好要安装的路径(重要),我的路径为:D:\mongodb
(3)在安装好之后,目录下应该是只有bin这一个文件夹目录的
(4)配置一下系统变量,这个方便自己以后在cmd中的每个目录都能用mongodb的命令,所以还是配一下好(这个应该都会吧,就是和java配置jdk一样)。
直接到我的电脑中,右键属性,再高级选项,然后环境变量,找到path,然后添加刚刚那个bin所在的目录路径就好了。
(5)在安装路径下创建两个文件夹,一个叫做data,一个叫log,并且在log这个文件夹里面,再创建一个mongodb的文件(用记事本创建就好了,不创也行,但是一定要有log的这一级文件夹,否则后面启动不了数据库)
(6)启动mongodb服务:打开命令行输入命令
>mongod --dbpath "d://mongodb//data" --logpath "d://mongodb//log//mongodb.log" --logappend
解析:mongod --dbpath 命令是创建数据库文件的存放位置,启动mongodb服务时须要先确定数据库文件存放的位置,否则系统不会自己主动创建,启动会不成功。--logpath 表示日志文件存放的路径 --logappend 表示以追加的方式写日志文件
(7)在window中的我的电脑里面添加一个服务选项,这样的作用相当于安装MySQL一样,以后启动就可以从服务里面直接启动了。在cmd中通过命令:mongod --logpath "d://mongodb//log//mongodb.log" --logappend --dbpath "d://mongodb//data" --directoryperdb --serviceName MongoDB --install
这样就能够实现了。
(8)别高兴太早了,当系统中有mongdb这个服务选择的时候,点击开启,可能会出现一个错误。
(9)别急,当出现这个问题的时候,是否还记得再前面,我们创建了一个data的目录,这时候,只需要把data目录里面的内容全部删除就可以了,这原因可能就是出现冲突了,所以导致无法开启。
(10)好了,这个时候开启服务,应该是能够正常启动了。
(11)然后再cmd中,通过命令mongod,则开启了服务,接着再用mongo命令,则可以进入mongodb的控制了,这里面就和mysql的管理一样了。下面也有一些这方面的知识点。
温馨提示:管理数据库的时候,最好用一个可视化的工具来进行管理,这样总的还是方便一点的,但是千万别忘记了如何用命令来操作数据库,这也是程序员需要掌握的。
一:MongoDB的基本操作知识:
1:查看数据库:db
2:查看所有数据库:show dbs
3:切换数据库:use 数据库名
4:删除数据库:db dropDatabase()
5:集合创建:db。createCollection(name , options)
6:查看当前数据库的集合:show collections
7:删除集合:db。集合名称。drop()
8:Mongo支持的数据类型
9:插入数据:db。集合名称。insert(document) //类似MySql中的insert操作
例如:db.student.insert({name:小明,age:18})
10:查询数据:(1)db。集合名称。find() //返回所有数据 //类似MySql中的 select * from 表名
(2)db。集合名称。findOne() //返回一条数据
(3)db。集合名称。find()。pretty() //将查询的结果格式化(以json格式显示)
11:更新数据:db。集合名称。updata(<query> ,<updata>,{nuli:<boolean>}) //参数一:查询条件 参数二:修改的内容 参数三:修改的行数,默认修改一行
例如:db。student。updata。({name:小明},{name:小红} ) //修改了对应的名字
如果要指定修改的属性,就要在第二个参数的前面加一个$set:,否则会整个的内容都被修改了
12:数据保存:db。集合名称。save(document)
13:删除集合中的属性内容:db。集合名称。remove(<query>,{justOne:<boolean>}),第二个参数为要进行删除的条数,ture为一条,默认是false,删除多条
例如:db.student.remove({name:小明},{justOne:true}) //删除姓名为小明的,且只删除一条
例如:db。student。remove() //表示全部删除
14:逻辑操作(用例子来解释)
(1)与操作:例如:db。student。find({name:“小明”},{age:{$gt:18}}) //查询名字叫小明并且年龄大于18的数据
(2)或操作:例如:db。student。find($or:【{name:‘小明’},{age:18}】) //查询名字叫小明或者年龄为18的数据
(3)范围运算符:例如:db。student。find({age:{$in:【18,20】}}) //年龄在18到20岁之间的数据
(4)支持正则表达式查询:例如,db。studnet。find({name:{regex:‘^黄’}}) //名字是以黄开头的数据
(5)自定义查询:例如:db。studnet。find({$where:function(){return this。age>20}})
(6)读取指定数量的文档:例如:db。studengt。find()。limit(“里面填入需要返回的数据条数”)
(7)跳过指定数量的文档:例如:db。student。find()。skip(“填入要跳过的数据数量”)
(8)显示指定的字段:例如:db。student。find({} , {name:1})//如果要显示某个字段,则在第二个参数中以字段名和1的这样的形式,不写或者用0都是不显示
(9)排序:例如:db。student。find()。sort({name:1,age:-1}) //1表示升序,-1表示降序
(10)统计个数:例如:db。student。find(写条件)。count()
(11)消除重复:例如:db。student。disnct({‘gender’},{age:{$g5:20}}) //第一个参数:消除重复的字段, 第二个参数是条件
二:接下来说说如何将MongoDB和Django进行结合
随着非关系型数据库的流行,越来越多的人开始使用非关系型数据库,而在之前一般都只是将关系型数据库和Django进行结合,我也是考虑到要用MongoDB,所以就试着进行写写,我主要以一个例子和步骤来进行说明,我相信如果之前有用过关系型数据库和Django的人来说,应该看一下就都明白了。
(1)配置Setting。py文件
其中主要就是说明要使用的数据库的名字和建的集合名字。
DBNAME = 'mymongo' //主要就是这个,其他的地方都是系统文件中已经配置好了的
TEMPLATE_DIRS = (
os.path.join( APP_DIR, 'templates' )
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.blogapp',
)
(2)编写集合的结构(即表的结构),其实就是写models。py中的内容
#from django.db import models
from mongoengine import *
from MyApplicationMongodb.settings import DBNAME
#连接数据库的名字
connect(DBNAME)
class Post(Document):
title = StringField(max_length=120, required=True)
content = StringField(max_length=500, required=True)
last_update = DateTimeField(required=True)
这个地方比较关键,主要就是连接数据库,就是通过这里进行声明,然后class里面的内容其实和一般的关系型数据库差不多,只是这里的数据类型有改变,因为mongodb中的数据类型已经发生变化,所以需要对应的进行改变。这里的话,可以去查找一下关于它的数据类型有哪些,我这里就不多解释了,这里也只是用个简单的例子来说明。
(3)配置项目中的urls。py这个文件,很明显这个就是url的映射关系的配置了,这里和一般的配置都一样,自己想如何配置url就如何进行配置就好了
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('MyApplication.urls')),
]
这里说一下,就是由于个人的编程习惯而言,习惯性的将url都先映射到Django中的APP中,因为这样在跳转方面和views方面都习惯了,所以就是按照上面的配置,如果大家也是这样的话,千万别忘记了在APP中创建一个urls.。py的文件。。当然,如果你们喜欢直接映射也是可以的啦。
(4)由于我这里是按照上面的方式进行配置,所以我这就需要多了一步,在APP中的urls。py文件(如果不是按照我这样的两级映射的话,可以不用看下面这一步内容)
from django.conf.urls import url,include
from . import views
urlpatterns = [
url(r'^index/', views.index),
url(r'^update/', views.update),
url(r'^delete/', views.delete),
]
(5)编写views。py文件(这里就是大家想要进行的操作和传输数据及其获取数据的处理了,根据自己的项目需求来就是了),
from django.shortcuts import render
#from django.shortcuts import render_to_response
from django.template import RequestContext
from .models import Post
import datetime
def index(request):
if request.method == 'POST':
# save new post
title = request.POST['title']
content = request.POST['content']
post = Post(title=title)
post.last_update = datetime.datetime.now()
post.content = content
post.save()
# Get all posts from DB
posts = Post.objects
return render(request ,'MyApplication/index.html', {'Posts': posts})
def update(request):
id = eval("request." + request.method + "['id']")
post = Post.objects(id=id)[0]
if request.method == 'POST':
# update field values and save to mongo
post.title = request.POST['title']
post.last_update = datetime.datetime.now()
post.content = request.POST['content']
post.save()
template = 'index.html'
params = {'Posts': Post.objects}
elif request.method == 'GET':
template = 'MyApplication/update.html'
params = {'post': post}
return render(request , template, params)
def delete(request):
id = eval("request." + request.method + "['id']")
if request.method == 'POST':
post = Post.objects(id=id)[0]
post.delete()
template = 'index.html'
params = {'Posts': Post.objects}
elif request.method == 'GET':
template = 'MyApplication/delete.html'
params = {'id': id}
return render(request ,template, params)
(6)编写template模版中的内容,分为3个,index。html , delete。html , update。html
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<link href="{{STATIC_URL}}blog.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Blongo</h1>
<form method="post" action="http://127.0.0.1:8000/">
{% csrf_token %}
<ul>
<li>
<input type="text" name="title" placeholder="Post Title" required>
</li>
<li>
<textarea name="content" placeholder="Enter Content" rows=5 cols=50 required>
</textarea>
</li>
<li>
<input type="submit" value="Add Post">
</li>
</ul>
</form>
<!-- Cycle through entries -->
{% for post in Posts %}
<h2> {{ post.title }} </h2>
<p>{{ post.last_update }}</p>
<p>{{ post.content }}</p>
<form method="get" action="http://127.0.0.1:8000/update">
<input type="hidden" name="id" value="{{ post.id }}">
<input type="hidden" name="title" value="{{ post.title }}">
<input type="hidden" name="last_update" value="{{ post.last_update }}">
<input type="hidden" name="content" value="{{ post.content }}">
<input type="submit" name="" value="update">
</form>
<form method="get" action="http://127.0.0.1:8000/delete">
<input type="hidden" name="id" value="{{post.id}}">
<input type="submit" value="delete">
</form>
{% endfor %}
</body>
</html>
<!-- update.html -->
<!DOCTYPE html>
<html>
<head>
<link href="{{STATIC_URL}}blog.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Blongo - Update Entry</h1>
<form method="post" action="http://127.0.0.1:8000/update/">
{% csrf_token %}
<ul>
<li><input type="hidden" name="id" value="{{post.id}}"></li>
<li>
<input type="text" name="title" placeholder="Post Title"
value="{{post.title}}" required>
<input type="text" name="last_update"
value="{{post.last_update}}" required>
</li>
<li>
<textarea name="content" placeholder="Enter Content"
rows=5 cols=50 required>
{{post.content}}
</textarea>
</li>
<li>
<input type="submit" value="Save Changes">
</li>
</ul>
</form>
</body>
</html>
<!-- delete.html -->
<!DOCTYPE html>
<html>
<head>
<link href="{{STATIC_URL}}blog.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Blongo - Delete Entry</h1>
<form method="post" action="http://127.0.0.1:8000/delete/">
{% csrf_token %}
<input type="hidden" name="id" value="{{id}}">
<p>Are you sure you want to delete this post?</p>
<input type="submit" value="Delete">
</form>
</body>
</html>
(7)好了,这上面的步骤就是一个简单例子的开发过程了,其实回想过来也不是很难,对不对咯?只是怪自己不太熟悉mongodb,在配置的时候花了些功夫,我也把这个内容在这一个博客一开始就进行了总结了,主要也是为了更多的人一起来学习。来享受IT带来的快乐。
(8)顺便说一下,开发的时候用个MongoDB的可视化工具进行开发相对比较好,推荐一个好了,我自己也是用的这一个,robomongo,还挺好用的。。
当然,还有些关于Mongo和Django开发的知识,我都会结合自己的项目进行总结一下,时刻进行更新,然后再进行共享的,欢迎交流。。在这里非常感谢一个博客,因为看了他的博客之后帮助我少走了很多的弯路。大家也可以看看。点击打开链接
https://www.ibm.com/developerworks/cn/opensource/os-django-mongo/#artrelatedtopics感谢感谢。。。。。
下面附加一个mongodbEngine的开发文档