资讯专栏INFORMATION COLUMN

MongoDB学习笔记(2)- Mongo Shell 中文档的增、删、改

dunizb / 507人阅读

摘要:学习笔记中文档的增删改本文所使用的版本为一插入文档插入一个文档语法向数据库中的集合中插入一个文档注字段是系统自动生成的,也可以自己指定任何类型的字,但值不能重复。可以通过在执行完每条命令之后执行来检查是否成功

MongoDB学习笔记(2)- Mongo Shell 中文档的增、删、改
本文所使用的MongoDB版本为 4.0.10
> db.version();
4.0.10
一、插入文档 1. 插入一个文档
语法: db..insert(document)

test 数据库中的 user 集合中插入一个文档:

> use test;
switched to db test

> db.user.insert({ "username" : "Tom", "age" : 10 })
WriteResult({ "nInserted" : 1 })

> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 }
注: _id 字段是系统自动生成的,也可以自己指定任何类型的字,但值不能重复。
2. 插入多个文档
语法: db..insert([ document1, document2, ..., documentN ])

test 数据库中的 user 集合中插入多个文档:

> db.user.insert([
...     { "username" : "Mary", "age" : 30 },
...     { "username" : "Martin", "age" : 40 },
...     { "username" : "kart", "age" : 50 },
...     { "username" : "Jack", "age" : 20 }
... ])
BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 4,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})

> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 }
{ "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
{ "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
{ "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
{ "_id" : ObjectId("5d2f11b814077ad0dab139ca"), "username" : "Jack", "age" : 20 }
二、删除数据
语法: db..remove(条件)

删除 user 集合中名字等于 "Jack" 的文档

> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 }
{ "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
{ "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
{ "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
{ "_id" : ObjectId("5d2f11b814077ad0dab139ca"), "username" : "Jack", "age" : 20 }

> db.user.remove({ "username" : "Jack" })
WriteResult({ "nRemoved" : 1 })

> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 }
{ "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
{ "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
{ "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
三、修改数据
语法: update(条件,数据, 是否新增, 是否修改多条)

修改user 集合中年龄等于10的修改为20

方法一:

var u = db.user.findOne( { "age" : 10 } );
u.age = 20;
db.user.update( { "age" : 10 } , u ) 或 db.user.save(u);
> var u = db.user.findOne({ "age" : 10 })

> u.age = 20
20

> db.user.save(u)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 20 }
{ "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
{ "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
{ "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }

方法二:

db.user.update( query, object[, upsert_bool, multi_bool] )
> var u = db.user.findOne({ "age" : 20 })

> u.age = 10
10

> db.user.update({ "age" : 20 }, u)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find()
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 10 }
{ "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
{ "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }
{ "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
upsert_bool:如果没有满足查询条件的记录的话,是否新创建这条记录

注:如果有多条记录满足{"age":10},只有第一条记录会被修改。可以设置第四个参数为true,修改所有的记录。

修改数据时容易出错的地方

如有这样的数据:

{"_id" : 1 , "username" : "abc" , "age" : 20 , "sex" : "boy" }

想要修改年龄为22岁,错误代码如下:

var u = db.user.update({ "_id" : 1 }, { "age" : 22 })

记录修改完之后变成:

{ "_id" : 1 , "age" : 22 }

正确的方法:

var  u = db.user.find({ "_id" : 1 });     --> 取出记录
u.age = 22;                                --> 在原记录基本上修改
db.user.save(u) 或  db.user.update({ "_id" : 1 } , u)
四、修改器的使用 1. $inc : 加一个数字

把Tom的年龄加2

> db.user.update({ "username" : "Tom" }, { $inc : { "age" : 2 } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find({ "username" : "Tom" })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12 }
2. $set : 修改某一个字段,如果该字段不存在就增这个字段

修改Tom的电话号码为10086,如果没有这个字段就新增这个字段

> db.user.update({ "username" : "Tom" }, { $set : { "tel" : "10086" } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find({ "username" : "Tom" })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" }

修改数组

3. $push : 向数组中添加元素

向 Tom 的好友中添加一个好友 Jack。

> db.user.update({ "username" : "Tom" }, { $push: { "friend" : "Jack" } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find({ "username": "Tom"}, { "username": 1, "friend": 1 })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Jack" ] }
4. $each : 遍历操作元素

向 Tom 的好友中批量添加好友 "Mary", "Jocker"。

> db.user.update({ "username" : "Tom" }, { $push : { "friend" : { $each : ["Mary", "Jocker"] } } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find({ "username" : "Tom" }, { "username" : 1, "friend" : 1 })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Jack", "Mary", "Jocker" ] }
5. $pop : 从数组的首或尾取出数据

从abc的好友中删除最后一个好友

> db.user.update({ "username" : "Tom" }, { $pop : { "friend" : 1 }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find({ "username" : "Tom"}, { "username" : 1, "friend" : 1})
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Jack", "Mary" ] }

从abc的好友中删除第一个好友

> db.user.update({ "username" : "Tom" }, { $pop : { "friend": -1 } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find({ "username" : "Tom" }, { "username" : 1, "friend" : 1})
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "friend" : [ "Mary" ] }
6. $unset : 删除一个字段

删除 Tom 的 friend 字段

> db.user.update( { "username" : "Tom" }, { $unset : { "friend" : "" } } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.user.find({ "username" : "Tom" })
{ "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" }
MongoDB中修改、删除、更新都是瞬间完成的,即客户端只把命令发给服务器,但不会检查这条命令是否执行成功。
可以通过在执行完每条命令之后执行 getLastError 来检查是否成功!
> db.runCommand({"getLastError": 1})
{
        "connectionId" : 1,
        "n" : 0,
        "syncMillis" : 0,
        "writtenTo" : null,
        "err" : null,
        "ok" : 1
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106198.html

相关文章

  • MongoDB 的编程操作

    摘要:系列文章的安装的命令操作的编程操作前面文章首先介绍了数据库系统的安装,接着介绍了的工具来操作数据库,掌握了命令行对数据库的增删改查,四个基本操作。现在来介绍,如何用编程语言来操作数据库。 MongoDB 系列文章: MongoDB 的 yum 安装 MongoDB 的命令操作 MongoDB 的编程操作 前面文章首先介绍了 MongoDB 数据库系统的安装,接着介绍了 MongoD...

    dkzwm 评论0 收藏0
  • MongoDB 的命令操作

    摘要:文档是的核心概念,文档是操作数据库的最小单元。等你了解这这些命令或者函数,你再尝试在脚本代码中操作数据库,你会发现这种非常容易上手。 MongoDB 系列文章: MongoDB 的 yum 安装 MongoDB 的命令操作 MongoDB 的编程操作 在介绍 MongoDB 的具体操作和使用之前,有必要介绍一些 MongoDB 的基本概念,有了这些基础和知识铺垫,后面的操作,才会掌...

    Eastboat 评论0 收藏0
  • mongoDB初阶系列二:node的增

    摘要:前言上一篇中初阶系列一用户和权限介绍了用户和权限,这一篇将介绍如何在中进行增删改查。这是初阶系列的第二篇,接下来还有第三篇,借助,更优雅地操作数据。 前言 上一篇中(mongoDB初阶系列一:用户和权限)介绍了用户和权限,这一篇将介绍如何在node中进行增删改查。 准备 首先,要在node中使用mongoDB,需要安装MongoDB Driver,命令如下:npm install mo...

    Barrior 评论0 收藏0
  • mongoDB初阶系列二:node的增

    摘要:前言上一篇中初阶系列一用户和权限介绍了用户和权限,这一篇将介绍如何在中进行增删改查。这是初阶系列的第二篇,接下来还有第三篇,借助,更优雅地操作数据。 前言 上一篇中(mongoDB初阶系列一:用户和权限)介绍了用户和权限,这一篇将介绍如何在node中进行增删改查。 准备 首先,要在node中使用mongoDB,需要安装MongoDB Driver,命令如下:npm install mo...

    kevin 评论0 收藏0
  • MongoDB学习笔记(1)- MongoDB简介、数据类型及帮助命令

    摘要:数据模型取决于数据库类型。仅支持位浮点数,所以位整数会被自动转换为位浮点数。位浮点数中的数字都是这种类型。数字只能表示为双精度数位浮点数的另外一个问题是,有些位的整数并不能精确地表示为位浮点数。 MongoDB学习笔记(1)- MongoDB简介及数据类型 本文所使用的MongoDB版本为 4.0.10 > db.version(); 4.0.10 一、MongoDB 介绍 1. Mo...

    nihao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<