MongoDB+Django知识点

      这里我好好的来说一下如何安装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的开发文档

https://segmentfault.com/a/1190000008025156

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值