mongodb——curd

好了,这篇博客就是正式讲crud操作啦。我会尽可能的讲的简单一点,然后本篇博客也只会讲一些简单常用的操作。

mongo插入

让我们先从插入命令开始。
mongodb的插入命令通用格式如下:

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

document or array of documents:要插入的文档内容,bson结构
ordered:操作是否有序(有序:在操作发生错误时不执行下面的操作;无序:继续执行)
writeConcern:mongo的写策略

其他的插入api:
insertOne()
insertMany()
其含义也顾名思义,是指定插入bson数量的。insertOne插入一个bson,insertMany是插入一个bson数组的方法。

示例:

db.test.insert({
    "name":"tom",
    "age":13,
    "like":"apple"
})

db.test.insertOne({
    "name":"tom",
    "age":13,
    "like":"apple"
})

db.test.insertMany([{
    "name":"tom",
    "age":13,
    "like":"apple"
},
{
    "name":"jack",
    "age":14,
    "like":"pear"
}])

**注:**如果执行过上面几句示例的话,大家应该能够发现我们在成功插入后显示的结果是不一样的。在insert执行后,显示的是:
WriteResult({ "nInserted" : 1 })
而在执行insertOne和insertMany执行完显示的是
{"acknowledged" : true,"insertedId" : ObjectId("5d11c1ce4a715b97743cfabd")}
关于这个返回的我们先不在这里详细说啦,将在之后的博客里详细讲解~~

第二种插入文档的方法是save

db.collection.save(    
	<document>,     
	{      
		writeConcern: <document> 
	}  
)  

与insert的异同如下:
区别:当_id在document存在时,如果_id与数据库中已有的值重复,insert会报错;save是根据_id找数据库的数据,有的话则会替换数据库里面的数据;没有则新增

相同点:新增的数据没有主键时,都是插入一条数据

mongo查找(简单版本)

就数据库来说,我们平时用到最多的一定是查找(所以索引就显得如此重要。。。)
这里暂时先简单介绍一下mongo的查询(几乎是用到最频繁的语句),复杂的查询操作将在之后的一篇博客中专门讲述。

首先介绍一种最常用的查找方法:

db.collection.find(query, projection)

query:查询条件(格式是bson,可以写的很复杂)
projection(投影):格式也是bson,最后结果的展示方式。将在之后的博客里详细讲解~~

最简单的我们可以通过find方法来查询集合里面的全量数据
db.test.find()
执行结果:
{ "_id" : ObjectId("5d11c1544a715b97743cfaba"), "name" : "jack", "age" : 14, "like" : "pear" }
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "grape" }
属性介绍:
_id:mongo自动为我们生成的文档主键(我们可以在插入文档的时候显示设置_id属性,但是必须要保证唯一性)
其他属性:我们自定义的文档属性

我们接下去根据不同的需求写简单的find表达式

  1. 查找名字为jack的文档,并显示全部属性
  2. 查找集合里面所有的名字(不去重)
  3. 查找14岁的tom
  4. 查找13岁的tom和14岁的jack

表达式如下:

1.db.test.find({“name”:“jack”}): 使用query来指定查询条件 where name=“jack”
{ "_id" : ObjectId("5d11c1544a715b97743cfaba"), "name" : "jack", "age" : 14, "like" : "pear" }
2.db.test.find({},{“name”:1,"_id":0): 不指定查询条件,使用投影指定返回字段(0表示不返回,1表示返回) 此处有坑,不能乱用!!!
{ "name" : "jack" }
{ "name" : "tom" }
{ "name" : "tom" }
3.db.test.find({“name”:“tom”,“age”:14}): sql中的and查询 where name=“tom” and age=14
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "grape" }
4.db.test.find({$or:[{“name”:“tom”,“age”:13},{“name”:“jack”}]}): or查询 where (name=“tom” and age=13) or name=“jack”
{ "_id" : ObjectId("5d11c1544a715b97743cfaba"), "name" : "jack", "age" : 14, "like" : "pear" }
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }

其他的查询api:
findOne():只会返回查询结果中的第一条数据

mongo删除

mongo里面的删除不是delete而是remove!!
其常用api如下:

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

query:指定删除文档的查询条件
queryOne:如果设置为true或者1,则只删除一个文档;如果不设置或者设置false,则删除匹配出来的所有文档。默认为false
writeConcern:mongo的写策略

示例:
删除jack的文档
db.test.remove({“name”:“jack”})
WriteResult({ "nRemoved" : 1 }) 显示已经删除了一个文档

其他api:
db.collection.deleteOne()
db.collection.deleteMany()

mongo更新

常用的更新api:

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

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如,,inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :mongo写策略。

**注意:**mongo的update的机制是先使用query查询出要更新的文档,然后再用update的数据完全覆盖查询出来的文档,并不是单个字段更新!!! 若要更新指定的字段,则需要用到$set标记,这种特殊符号我们将会在之后讲解。

目前数据库中的记录为
db.test.find()
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "grape" }
我们现在把14岁tom的like也改成apple:
db.test.update({“name”:“tom”,“age”:14},{“name”:“tom”,“age”:14,“like”:“apple”})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 表示已经修改了一条。我们再查看一下
db.test.find()
{ "_id" : ObjectId("5d11c1dd4a715b97743cfabe"), "name" : "tom", "age" : 13, "like" : "apple" }
{ "_id" : ObjectId("5d11cc6f4a715b97743cfabf"), "name" : "tom", "age" : 14, "like" : "apple" }

其他api:
db.collection.updateOne():替换第一个查询出来的文档
db.collection.updateMany():替换所有查询出来的文档
db.collection.replaceOne():只能替换整个文档,update可以替换某一个字段

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章