mongoDB

安装MongoDB

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

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

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

MongoDB常规操作

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

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

 
C:\Program Files\MongoDB\Server\3.0\bin\mongo
MongoDB shell version: 2.6.3
connecting to: test
>
 

当然,如果你已经将 C:\Program Files\MongoDB\Server\3.0\bin 加入到环境变量中,你就可以不需要切换目录了,直接执行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方法,封装出业务方法,来满足实际操作的需要。

 

 

posted @ 2016-11-20 21:17  小蚊子飞  阅读(304)  评论(0编辑  收藏  举报