MongoDB+Django知识点

来源:互联网 发布:alexa软件 编辑:程序博客网 时间:2024/06/17 19:25

      这里我好好的来说一下如何安装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 modelsfrom 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,includefrom django.contrib import adminurlpatterns = [    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,includefrom . import  viewsurlpatterns = [    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_responsefrom django.template import RequestContextfrom .models import Postimport datetimedef 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的开发文档

https://segmentfault.com/a/1190000008025156