乐趣区

关于mongodb:mongo-系列常用操作实际操练

插入数据

> db.users.insert({"name" : "xiaomotong", "age" : 18})

> db.users.insert({name:"xiaozhu",age:15,hobby:"basketball",infos:{tall:190,height:70},school:"sh"})

> db.users.insertMany([{name:"xiaopang"},{name:"wangwu"}])

> db.users.insertMany([{name:"nancy", "age" :25, "hobby" : "study", "infos" : { "tall" : 175, "height" : 60}, "school" : "hn" },{name:"job", "age" : 19, "hobby" : "basketball", "infos" : { "tall" : 170, "height" : 70}, "school" : "nj" }])
  • 能够应用 insert,insertOne,insertMany 插入不同的数据,各取所需,其中 insertMany 用于插入多条数据,当然也能够插入 1 条数据

mongodb 在插入数据下面还有这么多函数办法能够应用,各取所需

更新数据


> db.users.find()
{"_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaomotong", "age" : 18 }
...

> db.users.update({name:"xiaomotong"},{$set:{name:"xiaokeai",age:25,hobby:"reading",infos:{tall:175,height:62},school:"cs"}})
WriteResult({"nMatched" : 1, "nUpserted" : 0, "nModified" : 1})

应用 $set 示意须要更新字段

查问数据的时候咱们发现,mongodb 主动在咱们的文档中退出了 _id 字段,这是一个主键,如果不本人设置的话,mongodb 为默认给咱们加上,是一个 24 位的 uuid

对于更新的办法,官网还提供了这些办法:

查找数据

> db.users.find({"infos.tall":{$gt:170}})
{"_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : {"tall" : 175, "height" : 62}, "school" : "cs" }
{"_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : {"tall" : 190, "height" : 70}, "school" : "sh" }
{"_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : {"tall" : 175, "height" : 60}, "school" : "hn" }

此处的 $gt 是大于 的意思,上期有说到这些运算符,再来回顾一遍

上述 infos.tall 属于子查问,示意 infos 是一个内嵌文档,须要查找的是 文档中的 tall 字段,咱们也不能不加双引号,因为零碎会默认辨认 infos.tall 为一个字段,实际上是找不到这个字段的,因而是查问不到后果的,如下报错:

> db.users.find({infos.tall:{$gt:170}})
2021-10-04T09:39:21.349+0800 E  QUERY     uncaught exception: SyntaxError: missing : after property id :
@(shell):1:20

以更加敌对的形式查问数据展现进去

> db.users.find({"infos.tall":{$gte:180}}).pretty()
{"_id" : ObjectId("615a56d6bc6afecd2cff8f96"),
        "name" : "xiaozhu",
        "age" : 15,
        "hobby" : "basketball",
        "infos" : {
                "tall" : 190,
                "height" : 70
        },
        "school" : "sh"
}

此处的 db.users.find({"infos.tall":{$gte:180}}) 就相似于关系型数据库的 sql 语句:select * from users where "infos.tall" >= 180

例如查问,身高在 是 175 或者 190 的学生.

此处的 db.users.find({"infos.tall":{$in:[190,175]}}) 就相似与关系型数据库的 select * from users where "infos.tall" in (190,175)

演示一下简略的正则表达式:

> db.users.find({name:/^w/}).pretty()
{"_id" : ObjectId("615a5856d988690b07c69f65"), "name" : "wangwu" }
> db.users.find({name:/g$/}).pretty()
{"_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
  • 查问 name 字段,匹配 w 结尾的后果,匹配进去 wangwu
  • 查问 name 资源,匹配 g 结尾的后果,匹配进去 xiaotong

此处在咱们查问的时候,/ 正则表达式 /,mongodb 会自动识别并依照正则表达式的规定进行匹配和解决

咱们也能够查问 null

> db.users.find({infos:null})
{"_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
{"_id" : ObjectId("615a5856d988690b07c69f65"), "name" : "wangwu" }

> db.users.find({infos:{$exists:false}})
{"_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }

查问字段为 null 能够应用第一种形式,查问字段不存在能够应用第二种形式

删除数据

> db.users.deleteOne({name:"wangwu"})
{"acknowledged" : true, "deletedCount" : 1}
> db.users.find({name:/^w/}).pretty()
>

罕用的删除办法有:

  • db.users.deleteOne()
  • db.users.deleteMany()
  • db.users.remove()

简略分页查问

> use mytest
switched to db mytest
> db.users.find()
{"_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : {"tall" : 175, "height" : 62}, "school" : "cs" }
{"_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : {"tall" : 190, "height" : 70}, "school" : "sh" }
{"_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
{"_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : {"tall" : 175, "height" : 60}, "school" : "hn" }
{"_id" : ObjectId("615a5917d988690b07c69f67"), "name" : "job", "age" : 19, "hobby" : "basketball", "infos" : {"tall" : 170, "height" : 70}, "school" : "nj" }

> db.users.find().limit(2)
{"_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : {"tall" : 175, "height" : 62}, "school" : "cs" }
{"_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : {"tall" : 190, "height" : 70}, "school" : "sh" }

> db.users.find().skip(2).limit(2)
{"_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
{"_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : {"tall" : 175, "height" : 60}, "school" : "hn" }
  • db.users.find() 查问所有的数据,依照默认的程序打印进去
  • db.users.find().limit(2) 从后面的后果中,限度取出 2 条
  • db.users.find().skip(2).limit(2)从后面的后果中,偏移 2 条,再限度取出 2 条

下一次,梳理聚合相干内容

官网一手材料:https://docs.mongodb.com/manu…

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是 阿兵云原生,欢送点赞关注珍藏,下次见~

退出移动版