非结构化数据库mongo操作入门

举报
黄生 发表于 2020/12/31 09:37:27 2020/12/31
【摘要】 本文主要讲解非结构化数据库mongo的操作,与之相对的是结构化数据库的SQL操作。首先登录数据库(假设我们已经建好了数据库)mongo -u user -p password adminshow dbsuse dbname到这里,和结构化数据库都很相似,比如MYSQL,但后面的就开始完全不一样了,从数据库之下,就开始不一样。结构化数据库里的存储对象叫表(table),但非结构化数据库里的存储...

本文主要讲解非结构化数据库mongo的操作,与之相对的是结构化数据库的SQL操作。
首先登录数据库(假设我们已经建好了数据库)

mongo -u user -p password admin
show dbs
use dbname

到这里,和结构化数据库都很相似,比如MYSQL,但后面的就开始完全不一样了,从数据库之下,就开始不一样。
结构化数据库里的存储对象叫表(table),但非结构化数据库里的存储对象叫集合(collection)。叫惯了的表,要改口叫集合了,会有些不习惯,但为了形成正确的概念,这个习惯要憋过来,叫集合。
标准的SQL语法是结构化数据库的操作语言,SQL中,先不说DDL数据定义语言,先说说DML数据操作语言,
SQL里的DML,以检索数据举例来说,是使用select开头的子句,select ...表示要获取哪些内容,然后接 from ...子句,表示从那个表里检索,再接where ...子句,表示检索条件。也就是说SQL这种语言它自己的结构化的组织也非常好,就是一个固定的框子,往里面填对应的内容就可以了。
但是mongo就不一样了。你得换一种看法,不然哪哪都不顺眼,也不顺手。
换一种什么样的看法会比较顺眼呢?如果你学过编程,那就看做是对象在引用属性或是在调用方法,而且是链式调用。这下就顺眼多了!
举例来说,我们要查看一个集合里的记录(准确的说,在非结构化数据库里叫文档document,不叫记录,这里混用不做区分),dbname.collectionname.findOne()
db里面有集合属性,集合里面有记录,调用集合的findOne()方法,美美的打印一条记录的内容出来
这样是不是好理解多了~

下面我们体验一下基本的操作,包含有建集合、查询/条件查询、条件更新、删除等。
首先是建集合,结构化数据库的建表,那必须定义表的结构。但是非结构化数据库,哈哈哈,那就是随意!
给个表名就可以,以后想往表里放东西,随意,没有任何字段上的结构定义的约束。

> db.createCollection('ic')
{ "ok" : 1 }

然后我们插入4条记录,准备点数据

> db.ic.insert({'name':'superman','money':0})
WriteResult({ "nInserted" : 1 })
> db.ic.insert({'name':'admin','money':0})
WriteResult({ "nInserted" : 1 })
> db.ic.insert({'name':'u1','money':0})
WriteResult({ "nInserted" : 1 })
> db.ic.insert({'name':'u2','money':0})
WriteResult({ "nInserted" : 1 })

看一下记录,看所有,和看一条(格式化显示)

> db.ic.find()
{ "_id" : ObjectId("5fec456389372f26d3398cb5"), "name" : "superman", "money" : 0 }
{ "_id" : ObjectId("5fec457189372f26d3398cb6"), "name" : "admin", "money" : 0 }
{ "_id" : ObjectId("5fec457789372f26d3398cb7"), "name" : "u1", "money" : 0 }
{ "_id" : ObjectId("5fec457c89372f26d3398cb8"), "name" : "u2", "money" : 0 }
> db.ic.findOne()
{
    "_id" : ObjectId("5fec456389372f26d3398cb5"),
    "name" : "superman",
    "money" : 0
}

如果上面的操作你觉得还比较爽的话,下面的就没有那种感觉了
查找一条记录

> db.ic.find({'name':'u1'})
{ "_id" : ObjectId("5fec457789372f26d3398cb7"), "name" : "u1", "money" : 0 }

更新,将name为superman和admin的除外,其他人的money都给到10000。你看看吧,这个写法是人写的,人看的吗?看看这个and条件判断,简直不要太难看

> db.ic.update({$and:[{'name':{$ne:'superman'}},{'name':{$ne:'admin'}}]},{$set:{"money":10000}},true,true)
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.ic.find()
{ "_id" : ObjectId("5fec456389372f26d3398cb5"), "name" : "superman", "money" : 0 }
{ "_id" : ObjectId("5fec457189372f26d3398cb6"), "name" : "admin", "money" : 0 }
{ "_id" : ObjectId("5fec457789372f26d3398cb7"), "name" : "u1", "money" : 10000 }
{ "_id" : ObjectId("5fec457c89372f26d3398cb8"), "name" : "u2", "money" : 10000 }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。