• mongoDB


    安装MongoDB

    我选择的是windows平台的mongodb安装方式,也很简单,只需要 下载 对应操作系统版本的Mongodb即可。(建议下载ZIP的安装包)

    怎么验证我们的mongodb已经可以使用了?

    1、通过命令行切换到mongodb的安装目录, 我的目录为 C:Program FilesMongoDBServer3.0in。2、在c盘中创建 C:mongodbdata 和 C:mongodblogs,分别用来存储数据文件和日志文件。3、命令行执行 mongod --dbpath C:mongodbdata,用来启动 mongodb 服务器。4、命令行执行 mongo 127.0.0.1:27017,启动 mongodb 客户端。

    MongoDB常规操作

    Mongodb服务启动成功后,我们就可以使用客户端工具来连接mongodb了。 这里我们使用的是mongo提供的客户端工具,在我们刚才安装的mongodb目录下bin目录底下

    同样的进入到我们的mongodb的bin目录,执行 mongo命令

     
    C:Program FilesMongoDBServer3.0inmongo
    MongoDB shell version: 2.6.3
    connecting to: test
    >
     

    当然,如果你已经将 C:Program FilesMongoDBServer3.0in 加入到环境变量中,你就可以不需要切换目录了,直接执行mongo即可看到效果。

    通过上面的客户端连接结果可以看到,默认情况下会连接到 test这个数据库 。 如果我们想要知道mongodb现在有多少数据库,可以通过命令

    > show dbs
    admin     0.078GB
    local     0.078GB
    persons   0.078GB
    persons1  0.078GB
    test      0.078GB
     

    如果想要知道当前是哪个数据库,使用 db 命令

    > db
    test
     

    如果想要切换到其他的数据库, 使用命令 use <your-dbname>

    > use admin
    switched to db admin
     

    显示当前数据库有哪一些集合show collections

     
    > show collections
    cinema
    emps
    parents
    people
    persons
    system.indexes
    user
     

    当然,如果你第一次使用运行 show collection ,结果是空的,但是当你往集合里面插入数据后,就可以看到集合以及对应的数据库都会被创建。

     
    > use demo
    switched to db demo
    > show collections
    > db.users.insert({name:"zhangsan",password:111111})
    WriteResult({ "nInserted" : 1 })
    > show collections
    system.indexes
    users
    > db
    demo
    > db.users.find()
    { "_id" : ObjectId("56cc6bb710f6b32d1d3c1278"), "name" : "zhangsan", "password" : 111111 }
     

    在上面的操作中,我们切换到demo数据库,并且创建了users这个集合,还往users集合插入一条数据。

    插入数据

    在mongodb中,插入数据使用命令 db.collectionName.insert({data}) 或者 db.collectionName.save({data})这两个方法都可以正常工作。 对于 insert方法在上文中已经提到,这里演示save方法的使用。

     
    > db.users.save({name:"lis",password:222222})
    WriteResult({ "nInserted" : 1 })
     
    修改数据

    要修改数据,也有两种方式,一个是修改整个文档,一个是修改部分。首先先介绍修改整个文档的做法, 我们先把usres这个集合的数据都查询出来,方便和修改操作后的对比

     
    > db.users.find();
    { "_id" : ObjectId("56cc6bb710f6b32d1d3c1278"), "name" : "zhangsan", "password" : 111111 }
    { "_id" : ObjectId("56cc6d2410f6b32d1d3c1279"), "name" : "zhangsan1" }
    { "_id" : "56cc6d2410f6b32d1d3c1279", "name" : "zhangsan1", "password" : 333333 }
     

    第一种方式: db.collectionName.update({criteria},{data}); 这个方法会替换整个文档。

     
     
    > db.users.update({name:"zhangsan1"},{password:222222});
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.users.find();
    { "_id" : ObjectId("56cc6bb710f6b32d1d3c1278"), "name" : "zhangsan", "password" : 111111 }
    { "_id" : ObjectId("56cc6d2410f6b32d1d3c1279"), "password" : 222222 }
    { "_id" : "56cc6d2410f6b32d1d3c1279", "name" : "zhangsan1", "password" : 333333 }
     

    可以发现,当我们修改完之后,再去查找username为’linwenbin’的数据就不存在了。第二种方式: db.collectionName.update({criteria},{$set:{newData}}); 现在我们对另一条数据进行set的修改操作

     
    > db.users.update({_id: ObjectId("56cc6bb710f6b32d1d3c1278")},{$set:{name:"zhangsan", password:1}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
     

    $set操作可以只修改局部的属性,如果属性存在就是更新,如果不存在,就是新增。

    删除数据

    如果要删除某一个集合,可以通过 db.collectionName.drop(); 来删除。如果删除某一个集合内的数据,则通过 db.collectionName.remove({criteria});

     
    //删除一条记录
    > db.users.remove({_id: ObjectId("56cc6d2410f6b32d1d3c1279")})
    WriteResult({ "nRemoved" : 1 })
    //删除所有记录
    > db.users.drop()
    true
    > show collections
    system.indexes
    查询数据

    查询所有数据

    > db.persons.find().pretty()
     

    pretty() 方法是对查询结果进行格式化

    查询条件等于等于操作直接使用 {key:value} 这样的文档形式即可

    > db.persons.find({age: 27}).pretty()
     

    大于语法: {key : {$gt:value} }

    > db.persons.find({age: {$gt: 25}}).pretty()
     

    大于等于语法: {key : {$gte:value} }

    > db.persons.find({age: {$gte: 25}}).pretty()
     

    小于语法: {key : {$lt:value} }

    > db.persons.find({age:{$lt:25}}).pretty()
     

    小于等于语法: {key : {$lte:value}}

    > db.persons.find({age:{$lte:25}}).pretty()
     

    不等于语法: {key : {$ne:value} }

    > db.persons.find({age:{$ne:25}}).pretty()
     

    且操作 AND语法: {key1:value1, key2:value2, key3:value3 …}

    > db.persons.find({age:25, name:"jim"}).pretty()
     

    或操作 OR语法: { Extra close brace or missing open braceor 的value中(数组)

    > db.persons.find({$or:[{age: 25},{age:{$lt:25}}]},{_id:0,name:1,age:1})
     

    limit, skip, sort为了更好的测试分页的效果,新建一个集合,并插入30条数据

    > for(var i=0; i<30; i++){
    ... db.pages.insert({"val":i});
    ... }
     
    > db.pages.find().limit(5)
     

    可以发现,如果使用 limit方法的话会显示整个集合的所有文档。 指定了 limit 之后, 显示具体的条数,上文中,limit(5) 表示, 显示5条文档。

    limit方法除外,还有一个 skip 方法,skip也是接受一个整型的参数,表示查询结果跳过多少个文档。

     
    > db.pages.find().skip(18).limit(5)
    { "_id" : ObjectId("5574ca7b192e9dda0925e391"), "val" : 18 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e392"), "val" : 19 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e393"), "val" : 20 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e394"), "val" : 21 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e395"), "val" : 22 }
     

    在mongodb中,如果要对查询结果排序,那么需要使用sort方法。sort方法接收一个文档参数。也就是{key:value}的形式。其中,key表示要排序的字段,value的可取值为 1 / -1 。1表示升序asc,-1表示降序desc。话不多说,直接上例子:

     
    > db.pages.find().sort({val:-1})
    { "_id" : ObjectId("5574ca7b192e9dda0925e39c"), "val" : 29 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e39b"), "val" : 28 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e39a"), "val" : 27 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e399"), "val" : 26 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e398"), "val" : 25 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e397"), "val" : 24 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e396"), "val" : 23 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e395"), "val" : 22 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e394"), "val" : 21 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e393"), "val" : 20 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e392"), "val" : 19 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e391"), "val" : 18 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e390"), "val" : 17 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e38f"), "val" : 16 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e38e"), "val" : 15 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e38d"), "val" : 14 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e38c"), "val" : 13 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e38b"), "val" : 12 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e38a"), "val" : 11 }
    { "_id" : ObjectId("5574ca7b192e9dda0925e389"), "val" : 10 }
    Type "it" for more
     
    express + mongoose

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用。

    1、准备工作可以通过npm下载Mongoose依赖2、在项目中创建一个数据库连接

     
    var mongoose = require( 'mongoose' );
    var dbURI = 'mongodb://localhost/test';
    mongoose.connect(dbURI);
    mongoose.connection.on('connected', function () {
        console.log('Mongoose connected to ' + dbURI);
    });
     

    以上操作,通过mongoose已经创建了一个数据库连接,并连接上数据库。

    3、mongoose 是一种对象模型工具,它将具体的数据抽象成模型,这些模型拥有属性和操作数据的方法。那么,在操作之前,我们应该首先创建数据模型。

    名词解释: Schema: 用来描述数据的结构,里面包含数据的属性,每个属性的类型。它只是一种结构,并不具备对数据的实际操作(行为)Model: 将Schema发布为数据模型,它拥有数据的属性和行为。Entity: 由Model创建的数据实体,它的操作同样可以影响数据。

    在做具体的应用实现之前,我们都应该首先根据业务的需求,抽象出相应的数据模型,然后在通过mongoose提供的API方法,封装出业务方法,来满足实际操作的需要。

     

  • 相关阅读:
    矩阵快速幂---BestCoder Round#8 1002
    行列式及其基本性质
    排列,逆序
    扩展欧几里得
    AC automation 模板
    hdu2897 巴什博奕
    hdu2188 巴什博奕
    hdu1846 巴什博奕
    hdu2149 巴什博奕
    【转】博弈基础
  • 原文地址:https://www.cnblogs.com/zhaowenxin/p/6083550.html
Copyright © 2020-2023  润新知