为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB常用命令

标签:
MongoDB

title: MongoDB常用命令
tags:

  • mongodb

  • note

  • 笔记
    categories: 学习笔记
    description: >-
    最近新的项目中使用了MongoDB,所以也就花了点时间学习了一下。这篇文章给自己的学习做一个总结,打算日后把这篇文章当做API来使用,也分享给一些准备学习的小伙伴,希望能帮到你们。
    date: 2018-04-25 20:49:12
    ---

MongoDB常用命令

  最近新的项目中使用了MongoDB,所以也就花了点时间学习了一下。这篇文章给自己的学习做一个总结,顺便日后把这篇文章当做API来使用,也分享给一些准备学习的小伙伴,希望能帮到你们。


基础知识

  • mongo使用的默认数据库名是test。 如果没有创建任何数据库,那么集合及操作的数据将被保存在test数据库。

  • mongo中数据全部使用类json的文档格式表示,mongo中称为“bson”,下文中我会用“document”进行代替。

  • mongo与mysql的数据集合对应关系:

    {"_id":1,"name":"Bob","age":18}
    {"_id":2,"city":"北京"}

    你在可视化工具中看到的字段可能是_id、name、age、city,只不过第一条数据city为空,第二条数据name与age为空;然而情况却并不是这样的,要讲两条数据分开理解,它们只是单纯的归属于同一个聚合下而已,通过collection.find("_id":1)获取回的数据,不会包含name与age,有点类似于二维数组,每一维的数组(数据)都是各自独立的。

    • db=database,数据库没什么好说的。

    • table=collection,在mongo中,集合有点类似于表的概念。

    • mongo中字段还是有比较大的区别的,mongo的字段不是根据collection的设定而决定的,是根据数据决定。比如,有如下两条数据在同一collection中:

数据库集合操作

  • use DATABASE_NAME
    例:use mydb
    将会跳转到名为mydb的数据库,如果该数据库不存在,则创建该数据库。

  • db
    查看当前选择的数据库

  • show dbs
    查看数据库列表

  • db.dropDatabase()
    删除当前数据库

  • db.collections.drop()
    删除当前集合

新增(Create)

  • insert
    db.COLLECTION_NAME.insert(document)
    若不指定_id则会自动生成一个随机唯一的id,插入多条记录可以使用
    db.COLLECTION_NAME.insert([doucument,document])
    例:

db.col.insert({    title: 'MongoDB',by: 'bfsan',tags:['mongodb', 'database', 'NoSQL'],likes: 100})

此外还有inserOne()和inserMany(),使用这两个方法可以返回插入文档的id值,用法与insert一致。

更新(Update)

  • update

db.collection.update(    <query>,    <update>,
    {        upsert: <boolean>,//true则对于不存在对应情况的记录会新增,存在则会修改        multi: <boolean>,//true则会修改多条记录        writeConcern: <document>//(可选)写安全,用的不多,详细内容请再查询
    })

例:

db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );//对count>15的所有记录,count=count+1
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );//对查询是否存在count>4的记录,存在则为查到的第一条记录(增加/修改)test5=OK,不存在则增加一条test5=OK的记录
  • save

db.collection.save(
    <document>,
    {writeConcern: <document>}
)

save方法通过传入文档来替换已有文档,如不指定id则为新增,自动分配id,如果指定_id,替换包含_id的记录的全部数据。

删除(Delete)

  • delete

db.collection.remove(    <query>,//当条件为空时,则清空该collection
    {        justOne: <boolean>, //true或1,则只删除第一个文档        writeConcern: <document>
    })

查询(Retrieve)

  • find

db.collection.find(<query>, <projection>)//query条件,省略则查询所有;projection投影出指定的列,省略则显示所有列

查询条件

功能语法
等于{key:value}
小于{key:{$lt:value}}
小于或等于{key:{$lte:value}}
大于{key:{$gt:value}}
大于或等于{key:{$gte:value}}
不等于{key:{$ne:value}}
and{key1:value1, key2:value2}
or{$or:[{key1: value1},{key2:value2}]}
not{key:{$not:value}}
in{key:{$in:array}}
not in{key:{$nin:array}}
all{key:{$all:array}}
是否存在{key:{$exists:true/false}}
匹配某种数据类型的记录{key:{$type:type}}

结果处理

.pretty()       //格式化结果显示,使结果格式自动缩进符合规范。.limit(n)       //显示前n条记录.skip(n)        //跳过前n条记录.sort({key:1/-1})   //排序,1升序,-1降序

注:当查询时同时使用sort,skip,limit,无论调用先后,执行顺序总是sort-skip-limit。

连接查询

  • 借用变量进行中转,必需使用findOne方法才能存储进变量

var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
  • $lookup指令
    mongo提供的左外连接查询,语法格式为
    $lookup:{from,localField,foreignField,as}
    需要使用聚合命令来操作,格式为
    db.COLLECTION_NAME.aggreate({$lookup:{from,localField,foreignField,as}})

    • from,所要关联的集合名

    • localField,本集合中的“外键”

    • foreignField,所要关联集合中的字段

    • as,输出连接的文档所到的字段名

聚合

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
常用操作:
    {$project:{key:1/0}}    修改输入文档的结构。可以用来重命名、增加或删除字段,也可以用于创建计算结果以及嵌套文档。
    {$match:{query}}    用于过滤数据,只输出符合条件的文档。
    {$limit:n}      用来限制返回的文档数。
    {$skip:n}       在跳过指定数量的文档。
    {$sort:{key:1/-1}}  将文档排序后输出。
    $group          将集合中的文档分组,可用于统计结果。

作者: 薄峰 
出处: http://www.cnblogs.com/qbzf-Blog/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消