MongoDB
MongoDB安装
- 下载MongoDB
- 在D盘中创建 mongodb 文件夹然后把下载的包解压后把其中的 bin 文件夹拷贝到创建的 mongodb 文件夹中,
- 然后在mongodb文件夹中创建一个 data 文件夹,再在 data 文件夹中创建 db 文件夹
- 打开CMD命令行12345678d:cd mongodb\binmongod -dbpath D:\mongodb\data\db//在打开一个CMD命令行d:cd mongodb\binmongo//这样就可以用了
创建数据库
|
|
node.js链接MongoDB
|
|
基本操作
基本命令
1234//查看所有数据库show dbs//查看所有集合show tables插入数据
1234//选择imooc数据库use imooc//向imooc数据库插入数据db.movie.insert({x:1,y:1,z:1})查找数据
12bd.movie.find()bd.movie.find({x:1})更新数据,update只会更新一条数据
12345678//将{x:1,y:1,z:1},更新为{y:2}db.movie.update({x:1},{y:2})//更改{x:1,y:1,z:1}中y的数据db.movie.update({x:1},{$set:{y:2}})//更新一条不存在的数据db.movie.update({x:2},{y:2},true)//更新多条数据db.movie.update({x:1},{$set:{y:2}},false,true)数据的删除
1234//删除表中的数据db.movie.remove({x:1})//删除表db.movie.drop()
索引
_id索引
123db.movie.getIndexes()//删除索引db.movie.dropIndexes()单键索引
1db.movie.ensureIndex({x:1})多键索引
1db.movie.insert({x:[1,2,3,4,5]})复合索引
1db.movie.ensureIndex({x:1,y:2})过期索引
1db.movie.ensureIndex({x:1},{expireAfterSeconds:10})- 必须是指定的时间类型(ISODate,ISODate数组,不能是时间戳否则不能被自动删除)
- 如果指定了ISODate数组,则按最小的时间进行删除
- 过期索引不能是复合索引
- 删除时间是不确定的(后台每60s跑一次,且删除需要时间)
全文索引
1234567891011121314db.article.ensureIndex({key:"text"})db.article.ensureIndex({key_1:"text",key_2:"text"})db.article.ensureIndex({"$**":"text"})db.article.find({$text:{$search:"coffee"}})//或查询db.article.find({$text:{$search:"aa bb cc"}})//不包含ccdb.article.find({$text:{$search:"aa bb -cc"}})//包含aa bb ccdb.article.find({$text:{$search:"\"aa\" \"bb"\ \"cc\"}})//相似度度查询db.article.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}})db.article.find({$text:{$search:"aa bb"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})- 每次查询只能指定一个$text查询
- $text查询不能出现在$nor查询中
- 查询中如果包含了$text,hint不再起作用
- 还不支持中文
地理位置索引
- 2D索引:平面地理位置索引12345678910111213141516171819202122db.collection.ensureIndex({"w":"2d"})//插入:经度:[-180,180] 纬度:[-90,90]db.location.insert({[2,3]})//返回100个距离最近的点db.location.find({w:{near:[1,1]}})db.location.find({w:{near:[1,1]},$maxDistance:10})//矩形db.location.find({w:{geoWithin:{$box:[[1,1],[2,2]]}}})//圆db.location.find({w:{geoWithin:{$center:[[0,0],5]}}})//多边形db.location.find({w:{geoWithin:{$polygon:[[0,0],[0,1],[2,1],[3,1]]}}})//geoNeardb.runCommand({geoNear:<collecton>,near:[x,y],minDistance:(对2d索引无效)maxDistance:num:限制返回数目})db.runCommand({geoNear:"location",near:[1,2],maxDistance:10,num:1})
- 2D索引:平面地理位置索引
索引属性
- name:db.collection.ensureIndex({},{name:” “})
- unique:db.collection.ensureIndex({},{unique:true/false})
- sparse:db.collection.ensureIndex({},{sparse:true/false})
- expireAfterSecond
mongoose的使用
schema
123456789101112131415161718192021222324252627282930313233343536373839404142434445var mongoose = require('mongoose')var MovieSchema = new mongoose.Schema({doctor: String,title: String,language: String,country: String,summary: String,flash: String,poster: String,year: String,meta:{creatAt:{tyep:Date,default:new Date.now()},updateAt:{type:Date,default:new Date.now()}}})MovieSchema.pre('save',function(next){if(this.isNew){this.meta.createAt = this.mata.updateAt = Date.now())}else{this.meta.createAt =Date.now()}next()})MovieSchema.statics = {fetch: function(cb){return this.find({}).sort('meta.updateAt').exec(cb)},findById: function(id,cb){return this.findOne({_id: id}).exec(cb)}}module.exports = MovieSchmamodel
12345var mongoose = require('mongoose')var MovieSchema = require('../schemas/movies')var Movie = mongoose.model('Movie',MovieSchema)module.exports = Movie使用
1234567var Movie = require('./models/movie')Movie.findById(id,function (err,movie) {res.render('admin',{title: '电影后台更新页',movie:movie})})
模块的使用
|
|
密码加密
|
|