超简单!mongodb文档(document)的增删改查命令行操作和图解

本节开始学习mongodb文档的增删改查了,如果你还不清楚mongodb的数据类型、数据库和集合的创建和删除,可以参考:mongodb数据建模、数据类型、增删数据库和集合操作,因为之后会时不时使用到相关的命令。
一、插入文档文档相当于一条数据,文档是插入到集合中的,MongoDB使用insert()或save()方法插入一个文档。insert()的使用语法为:db.collection_name.insert(document),document使用类似JSON的语法,相当于一个对象。
添加文档例子:

> db.post.insert({ title: "La Oreja De Van Gogh", description: "The Ear Of Van Gogh", by: "Once", url: "http://www.srcmini.com", tags: ["mongodb", "espana"], likes: 12 })

超简单!mongodb文档(document)的增删改查命令行操作和图解

文章图片
这里post是我们的集合名,与之前的创建数据库一样,如果集合在数据库中不存在,那么MongoDB将创建这个集合,然后向其中插入一个文档。
在插入的文档中,如果我们没有指定_id参数,那么MongoDB将为该文档分配一个惟一的ObjectId。
_id是一个集合中每个文档惟一的12字节十六进制数字,12个字节划分如下
_id: ObjectId(4个字节 时间戳, 3个字节 机器ID, 2个字节 进程ID, 3个字节 增量器)

要在一个查询中插入多个文档,可以在insert()命令中传递一个文档数组。
>db.post.insert([ { title: 'MongoDB安装', description: 'The Price Of Salt', by: '半瓶木', url: 'http://www.srcmini.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 },{ title: '增删改查', description: "不小心删库了", by: 'Once', url: 'http://www.srcmini.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 20, comments: [ { user:'user1', message: '如何评论', dateCreated: new Date(2020,11,10,2,35), like: 0 } ] } ])

插入文档还可以使用db.post.save(document),如果没有在文档中指定_id,那么save()方法将与insert()方法工作相同。如果指定了_id,那么它将替换包含_id的文档的整个数据,如save()方法中所指定的那样。
二、查询文档要从MongoDB集合查询数据,需要使用MongoDB的find()方法,方法将以非结构化的方式显示所有文档,使用语法为:db.document_name.find(),要以格式化的方式显示结果,可以使用pretty()方法,即db.document_name.find().pretty(),例如:
超简单!mongodb文档(document)的增删改查命令行操作和图解

文章图片
除了find()方法之外,还有findOne()方法,它只返回第一个文档。
1、查询的where子句
【超简单!mongodb文档(document)的增删改查命令行操作和图解】要根据某些条件查询文档,可以使用以下where子句操作。
操作 语法 例子 等价的SQL
等于 {< key> :< value> } db.post.find({“ by” :” once” }).pretty() where by = ‘ once’
小于 {< key> :{$lt:< value> }} db.post.find({“ likes” :{$lt:50}}).pretty() where likes < 50
小于或等于 {< key> :{$lte:< value> }} db.post.find({“ likes” :{$lte:50}}).pretty() where likes < = 50
大于 {< key> :{$gt:< value> }} db.post.find({“ likes” :{$gt:50}}).pretty() where likes > 50
大于或等于 {< key> :{$gte:< value> }} db.post.find({“ likes” :{$gte:50}}).pretty() where likes > = 50
不等于 {< key> :{$ne:< value> }} db.post.find({“ likes” :{$ne:50}}).pretty() where likes != 50
超简单!mongodb文档(document)的增删改查命令行操作和图解

文章图片
2、AND与查询
在find()方法中,如果你通过’’分隔多个键来传递它们,那么MongoDB将其视为AND与条件,下面是AND与的基本语法
>db.post.find( { $and: [ {key1: value1}, {key2:value2} ] } ).pretty()

超简单!mongodb文档(document)的增删改查命令行操作和图解

文章图片
3、OR或查询要基于OR或条件查询文档,需要使用$or关键字,下面是OR的基本语法
>db.post.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()

超简单!mongodb文档(document)的增删改查命令行操作和图解

文章图片
4、同时使用AND和OR查询
下面的例子将显示likes大于10的文档,相当于SQL where子句:’ where like > 10 AND (by = ” OR title = ” )’
超简单!mongodb文档(document)的增删改查命令行操作和图解

文章图片
三、更新文档MongoDB的update()和save()方法用于将文档更新到集合中。update()方法更新现有文档中的值,而save()方法用在save()方法中传递的文档替换现有文档。
1、update()方法
Update方法的使用语法为:db.collection_name.update(查询标准,更新的数据),例如:
db.post.update({'title':'AAA'},{$set:{'title':'BBB'}})

默认情况下,MongoDB只更新一个文档。要更新多个文档,需要将参数’ multi’ 设置为true,如:
db.post.update({'title':'AAA'}, {$set:{'title':'BBB'}},{multi:true})

2、save()方法
save()方法用在save()方法中传递的新文档替换现有文档,使用语法为:db.collection_name.save(_id:ObjectId(), new_data)。
四、删除文档MongoDB的remove()方法用于从集合中删除文档,方法接受两个参数,一个是删除标准,为可选项,不设置的话会删除所有;第二个是一个标记,设置为true或1,则只删除一个。
例如,下面的删除语句删除所有标题为’AA’的文档:
db.post.remove({'title':'AA'})

    推荐阅读