MongoDB入门篇(2)

3 篇文章 0 订阅

1.MongoDB基本使用

写入和查询:

-- 查看所有数据库
> show dbs
admin
imooc
local

-- 查看某一数据库下所有collection集合(先切换到对应数据库)
> use test1
> show tables
mycol 
runoob

-- 创建数据库,如果不存在就创建数据库,否则切换到指定数据库
use imooc

-- 删除数据库(先切换,再使用db.dropDatabase()命令)
use imooc
db.dropDatabase()

-- 创建集合 db.createCollection(name,options)[或者你直接插入文档时,MongoDB回驻地创建集合。]
db.createCollection("runoob")
db.createCollection("mycol",{capped:true,autoIndexId:true,size:6142800,max:10000})
db.mycol2.insert({"name":"菜鸟教程"})

-- 删除集合(先切换,再使用db.site.drop()命令)
use test1
> show tables
mycol
mycol1
system.indexes
runoob
> db.mycol1.drop()

插入文档:

-- 插入文档
> use test1
> show tables
mycol
runoob
> db.runoob.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100})

-- 查看已插入文档
db.runoob.find()
> { "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

-- 我们也可以将数据定义为一个变量,然后再插入
> document=({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});

>  db.col.insert(document)

MongoDB更新文档:

db.collection.update(
    <query>,
    <update>,
    {
     upsert:<boolean>,
     multi:<boolean>,
     writeConcern:<document>
    }
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如 , , <script type="math/tex" id="MathJax-Element-1">,</script>inc…)等,也可以理解为sql update查询内set后面的。
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

注:pretty()是格式化find()返回的结果。

这里写图片描述

-- 插入数据(准备数据)
db.col.insert({
    title:"MongoDB教程",
    description:"MongoDB是一个NoSQL数据库",
    by:"菜鸟教程",
    url:"http://www.runoob.com",
    tags:['mongodb','database','NoSQL'],
    likes:100
})
-- update()更新数据
db.col.update({"title":"MongoDB教程"},{$set:{"title":"MongDB"}})

db.col.find().pretty()
{
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

-- 以上只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置multi参数为true。
db.col.update({ "title":"MongoDB 教程" },{$set:{"title":"MongoDB"}},{multi:true})

删除文档:

db.collection.remove(
    <query>,
    {
        justOne:<boolean>,
        writeConcern:<doucment>
    }
)

参数说明:

  • query:(可选) 删除的文档的条件。
  • justOne:(可选) 如果设为true或1,则只删除一个文档。
  • writeConcern:(可选) 抛出异常的级别。
-- 接下来我们移除title为"MongoDb""Mongo"的文档
> db.col.find().pretty()
{
        "_id" : ObjectId("5b2b64e492586d0f4213902f"),
        "title" : "MongoDB",
        "description" : "MongoDB是一个NoSQL数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com"
}
{
        "_id" : ObjectId("5b2b6a4992586d0f42139030"),
        "title" : "MongoDb",
        "by" : "Runoob"
}
{
        "_id" : ObjectId("5b2b6ac292586d0f42139031"),
        "id" : ObjectId("5b2b6a4992586d0f42139030"),
        "title" : "Mongo"
}

> db.col.remove({"title":"MongoDb"})
WriteResult({ "nRemoved" : 1 })
> db.col.remove({"title":"Mongo"})
WriteResult({ "nRemoved" : 1 })
> db.col.find().pretty()
{
        "_id" : ObjectId("5b2b64e492586d0f4213902f"),
        "title" : "MongoDB",
        "description" : "MongoDB是一个NoSQL数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com"
}

-- 如果多个文档的title都是相同,且只想删除其中一个,可以设置justOne为1
db.col.remove(DELETION_CRITERIA,1)

如果我们想删除所有数据,可以使用以下方式(类似常规SQL的truncate命令):

db.col.remove({})

查询文档:

MongoDB查询数据的语法格式如下:

db.collection.find(query,projection)
  • query:可选,使用查询操作符指定查询条件
  • projection:可选,使用投影操作符返回指定的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用pretty()方法,语法格式如下:

db.col.find().pretty()

MongoDB 与 RDBMS Where语句比较(find()与where作用类似):

这里写图片描述

MongoDB AND条件:
MongoDB的find()方法可以传入多个键(key),每个键(key)以逗号隔开,即常规SQL的AND条件。

db.col.find({ key1:value1, key2:value2}).pretty()

实例:以下实例通过by和title键来查询菜鸟教程中的MongoDB教程的数据
类似于WHERE语句:WHERE by=”菜鸟教程” AND title=”MongoDB 教程”

db.col.find({"by":"菜鸟教程","title":"MongoDB 教程"}).pretty()

MongoDB OR条件:
MongoDB OR条件语句使用了关键字$or,语法格式如下:

db.col.find(
    {
        $or:[
            {key1:value1},{key2:value2}
        ]
    }
)

实例:查询by值为菜鸟教程 或 键 title值为MongoDB教程 的文档

db.col.find({$or:[{"by":"菜鸟教程"},{"title":"MongoDB 教程"}]})

AND和OR联合使用:
AND和OR联合使用,类似常规SQL语句为:’where likes > 50 AND (by = ‘菜鸟教程’ OR title=’MongoDB 教程’)’

db.col.find({"likes":{$gt:50},$or:[{"by":"菜鸟教程"},{"title":"MongoDbB 教程"}]}).pretty()

条件操作符:

条件操作符用于比较两个表达式并从mongoDB集合中获取数据。

MongoDB中条件操作符有:

  • (>)大于 - $gt
  • (<)小于 - $lt
  • (>= ) 大于等于 - $gte
  • (<=) 小于等于 - $lte
-- (>)大于操作符 $gt
db.col.find({"like":{$gt:100}})

-- (>=) 大于等于操作符 $gte
db.col.find({likes:{$gte:100}})

-- (<)小于操作符 $lt
db.col.find({like:{$lt:150}})

-- (<=)小于等于操作符 $lte
db.col.find({like:{$lte:150}})

-- 使用(<)和(>)查询 $lt$gt
db.col.find({likes:{$lt:200,$gt:100}})

$type 操作符:

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

这里写图片描述

-- 如果想获取"col"集合中title为String的数据
db.col.find({ "title":{$type:2} })

Limit 与 Skip方法:

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB读取的记录条数。

db.col.find().limit(number)

db.col.find({"title":1}).limit(2)

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接收一个数字传输作为跳过的记录条数。

db.col.find().limit(number).skip(number)
-- 下面实例只会显示第二条文档数据
db.col.find({"title":1}).limit(1).skip(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值