美文网首页
node操作mongodb基础

node操作mongodb基础

作者: 范er_er | 来源:发表于2019-11-05 10:06 被阅读0次

<meta charset="utf-8">

下载地址http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2012plus-latest-signed.msi
其他版本http://dl.mongodb.org/dl/win32/x86_64

一、MongoDB数据库环境安装

开启服务
mongod --dbpath D:\mdb
连接mongo
mongo

常用命令:

show dbs //查看所有数据库

二、 MongoDB数据库服务自动开启的问题处理

如果系统自动给我们开启了mongodb服务 而我需要自己通过mongod -dbpath 来指定我的数据库目录,所以先把系统开启的mongodb关闭
默认的mongodb服务的数据库目录为 C:\Program Files\MongoDB\Server\4.1\data
use admin
db.shutdownServer

三、数据库和数据集合的创建

use dbname //可以是任意数据库 如果没有这个数据库,在插入数据之后会被创建出来

show collections //查看数据库的数据集合

db.collectionname.insert() //给数据库的某个集合下插入数据

db.collectionname.find() //查询集合里的所有数据

db.collectionname.findOne({where}) //查询集合里的数据

db.collectionname.find().pretty() //格式化显示输出

db.collectionname.find().explain("executionStats")
//explain.executionStats.executionTimeMillis 查询具体执行时间

四、数据库和数据集合的删除

db.collectionname.drop() //删除数据集合

db.dropDatabase() //删除数据库

image

五、数据的插入

db //查看当前所在数据库

插入多个字段

db.user.insert({
... name:'张三',
... age:18,
... sex:'男'
... })
WriteResult({ "nInserted" : 1 })

先创建一个对象 然后在插入

x={
... name:'李四',
... age:19,
... sex:'女'
... }
{ "name" : "李四", "age" : 19, "sex":"女"}
db.user.insert(x)
WriteResult({ "nInserted" : 1 })

六、利用update方法更新数据

db.collectionname.update({wherer},{$set:Object},{multi:true},{upsert:true})

db.user.update({name:'lqs'},{$set:{age:118}})
//{multi:true} 默认只修改第一条数据 设置后就可以修改所有查询到的数据
//{upsert:true} 默认如果没找到就什么也不做,设置后如果没有找到就新增这条数据

两个简写方法:updateOne、updateMany

db.collectionname.updateOne({wherer},{$set:Object}) //只修改一条数据 效率高些

db.collectionname.updateMany({wherer},{$set:Object}) //修改多条数据 效率高些

七、利用save方法更新数据(替换数据)

是把对应id的数据去掉换成新的数据

db.collectionname.save({_id,...}) //根据_id替换数据 如果没有加_id则进行新增操作

 db.user.save({
"_id":ObjectId("5bf74376c65d42250c7869b3"),
"name":"ashuishushui",
age:'188'
})

八、删除数据

db.collection.remove({where},{justOne:true}) //删除数据 如果justOne为true 则只删除一条数据

两个简写操作:

db.collection.deleteOne({where})

db.collection.deleteMany({where})

九、 比较条件查询

在查询条件里:
{ age:{$gt:18} } >18
{ age:{$gte:18} } >=18
{ age:{$lt:18} }<18
{ age:{$lte:18} }<=18
{ age:{$ne:18} } !=18
{ age:{$eq:18} } =18

十、and和or数据查询

and就是在条件where对象里 多个字段

{name:'lqs',age:18}

or使用数据 查询如下:
{$or:[{name:'lqs'},{age:{$gte:18}}]}

and和or联合使用

db.user.find({
age:{$gte:18},//年龄大约等于18
$or:[{name:'zzz'},{name:'ashuishushui'}] //并且 name为zzz或ashuishushui
})

十一、数据查询包含模式和排除模式

对应的字段的显示 (包含还是排除)

db.user.find({},{age:1,name:1}) //(包含模式)只显示age和name字段
db.user.find({},{age:0,name:0}) //(排除模式)不显示age和name字段

  • 两种模式不能共用,特殊情况是 _id:0 可以与包含模式共用
    db.user.find({},{age:1,_id:0})

十二、$type操作符(筛选数据类型)

以下都是表示查询age字段的数据类型为string的记录

db.user.find({age:{$type:'string'}})

db.user.find({age:{$type:2}})

image

十三、limit skip方法

limit //限制查询条数

db.user.find({}).limit(2)//查询2条

以下都是取出1条数据跳过3条数据

db.user.find({}).limit(1).skip(3)

db.user.find({}).skip(3).limit(1)

十四、sort排序

db.user.find({}).sort({age:1}) //根据age升序排列

db.user.find({}).sort({age:-1}) //根据age降序排列

十五、创建索引

提高查询效率

db.user.createIndex({name:1,age:-1}) //根据name字段升序索引 根据age字段降序索引
创建多个字段的索引也叫复合索引

db.user.dropIndex({name:1})//删除索引

db.user.getIndexes() //查看集合索引信息

十六、aggregate数据聚合分组

db.user.aggregate([{$group:{_id:'$sex',num:{$sum:1}}}])
//_id为必须字段 表明是以哪个字段为分组依据 
//$sum:1 统计个数 赋给别名字段num

{ "_id" : "woman", "num" : 2}
{ "_id" : "man", "num" : 3 }

分组修饰符

db.user.aggregate([{$group:{_id:'$sex',num:{$sum:1}}}])

$sum:1后面跟数字 就是递增这个数字
$sum:'$age'后面跟字段 就是递增这个字段的值

类似$sum 我们称之为修饰符 有以下常见几个修饰符

  • $sum //求和
  • $avg //平均值
  • $first //每组中第一个记录的某字段的值
  • $last //每组中最后一个记录的某字段的值
  • $max //每组中某字段的最大值
  • $min //每组中某字段的最小值
  • $project //包含、排除模式
  • $match //相当于where查询条件
  • $limit //限制
  • $skip //跳过
  • $group //分组
  • $sort //排序
db.user.aggregate([{
$group:{
_id:'$sex',
num:{$sum:1},
total_age:{$sum:'$age'},
max_age:{$max:'$age'},
min_age:{$min:'$age'},
avg_age:{$avg:'$age'},
first_age:{$first:'$age'},
last_age:{$last:'$age'}
}}])

十七、管道查询

你指定多个处理命令 然后一个一个对数据进行处理或筛选

db.user.aggregate([....]}

db.user.aggregate([
{$project:{name:1,age:1,sex:1,_id:0}},//显示name age sex字段
{$match:{name:{$ne:'lqs'}}},//where name != 'lqs'
{$group:{_id:'$sex',count:{$sum:1}}},//分组
{$skip:1},//查询后的结果跳过1
{$limit:1}//再取出1个
])

相关文章

网友评论

      本文标题:node操作mongodb基础

      本文链接:https://www.haomeiwen.com/subject/rihsbctx.html