我选择的是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方法,封装出业务方法,来满足实际操作的需要。