MongoDB基础操作

mac2022-06-30  19

插入

Insert:

db.getCollection('protest').insert({"name":"shaozhqi","sex":"男"}) image.png

 

查看插入数据:

 

image.png

Save:

image.png

 

现在有两条数据:

 

image.png

 

插入定义好的变量:

 

image.png

查看结果:

 

image.png

InsertOne:

db.getCollection('protest').insertOne({ "name":"花无缺", "sex":"男" })

查看结果:

 

image.png

insertMany:

db.getCollection('protest').insertMany([ { "name":"花有缺", "sex":"男" }, { "name":"小鱼儿", "sex":"女" } ]); image.png

Sava与insert:

如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

验证:当使用insert,并且指定花有缺的id,更新名称,执行报错主键冲突:

 

image.png

使用save则已是更新成功:

 

image.png

查看结果:

 

image.png

Update

默认更新一条:写法一:

 

image.png

更新结果:

 

image.png

写法二:

 

image.png

更新结果:

 

image.png

写法三:可以看到写法一的第一个set没有生效,修改如下:

 

image.png

查看执行结果:

 

image.png

疑问点sex我们设置的和之前的值一样不能区分是否变更,修改如下执行:

image.png

 

image.png

果然也有问题;总结:如果要跟新多个字段只能用写法二的方式;

Update并且添加部门节点

image.png

查看结果:

 

image.png

 

修改设计部为产品部:

 

image.png

执行结果:

 

image.png

注:$这里是找到满足条件的子元素下标为name的字段

给我添加一辆宝马:

 

image.png

 

查看结果:

 

image.png

修改宝马为使用了三年:不能这么做:

 

image.png

结果:

 

image.png

会导致对象覆盖,数据丢失。应该这么做:我们先还原数据:

db.getCollection('protest').update( {"name":"邵志奇"},//条件 {$set:{"carinfo":{"name":"宝马X","price":"100万","use":"2年"}}}//要更新的字段 ); image.png

更新语句:

 

image.png

更新结果:

 

image.png

这里是单个对象,所有不适用$,使用后会报错Update 跟新多条:更新所有男性,分到A组:可以看到只有一条数据更新:

 

image.png image.png

multi

可以总结下update语法:

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 :可选,抛出异常的级别。修改语法如下:

image.png

 

查看更新结果:

 

image.png

也可简写:

 

image.png

跟新结果:

 

image.png

updateMany:

也可以用updateMany:这样就不用在写后面的参数了

 

image.png

 

更新结果:

 

image.png

当然updateOne是更新单个文档了

删除remove

默认删除满足条件的全部remove已近过时:官方推荐使用deleteOne与deleteMany删除如下数据:

image.png

语法:

image.png

查看结果:

image.png

 

可在语法上加1限制删除一条

 

image.png

Remove语法:

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

query :(可选)删除的文档的条件。justOne : (可选)如果设为 true 或 1,则只删除一个文档。writeConcern :(可选)抛出异常的级别。

deleteOne与deleteMany

语法类似remove,么有后面的限制条件了

查询Find

简单语法:

db.getCollection('protest').find({"_id":ObjectId("5af4f87d222a56e8480bd0e7")})

之前准备的全部数据:

 

image.png

Or:查找A组或者C组的全部成员:

 

image.png

 

准备以下数据:

 

image.png

查询语句:

db.getCollection('protest').find({"age":{$gt:20},$or:[{"group":"A组"},{"group":"C组"}]})

年龄要大于20并且必须是A组或者C组的人。如果数据中确实对应的字段会被直接过滤掉

 

image.png

 

指定返回查询内容:

db.getCollection('protest').find({"age":{$gt:20},$or:[{"group":"A组"},{"group":"C组"}]},{name:1,by:1,sex:1,by:1}) db.getCollection('protest').find({"age":{$gt:20},$or:[{"group":"A组"},{"group":"C组"}]},{name:1,sex:1,by:1}) db.getCollection('protest').find({"name":"邵志奇"},{"deptIds":1})//查看部门

_id 键默认返回,需要主动指定 _id:0 才会隐藏

 

image.png

In:

db.getCollection('protest').find({"age":{$in:[20,19,24]}}) db.getCollection('protest').find({"age":{"$in":[20,19,24]}})

MongoDB常用操作符

(>) 大于 - $gt (<) 小于 - $lt (>=) 大于等于 - $gte (<= ) 小于等于 - $lte $ne ----------- not equal != $eq -------- equal =

Limit &&skip

返回满足条件一条记录数

db.getCollection('protest').find({}).limit(1)

跳过前四条满足条件的数据,所以就会直接找到第五条

db.getCollection('protest').find({}).skip(4)

排序

ongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列语法示例:按照age由大到小排序

db.getCollection('protest').find({}).sort({"age":-1}) image.png

多字段排序:按照age降序,_id升序

db.getCollection('protest').find({}).sort({"age":-1,"_id":1})

注:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。

索引语法:db.COLLECTION_NAME.ensureIndex({KEY:1})Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可示例:

db.getCollection('protest').ensureIndex({"name":1})

复合索引:

db.getCollection('protest').ensureIndex({"name":1,"age":1})

其他参数:

 

image.png

示例:

db.getCollection('protest').ensureIndex({open: 1, close: 1}, {background: true})

聚合统计

http://www.runoob.com/mongodb/mongodb-aggregate.html

查看查询语句执行过程

db.getCollection('protest').find({"name":"邵志奇"}).explain()

记录

db.user1.update({"_id":"1"},{$set:{"name":"shao","age":"28"}})

// 需要更新那个数据,前面的大括号是条件,后面是要清空原有这条记录的所有字段(不包括_id)后要新存入的字段//in语句

db.getCollection('dept').find({"_id":{$in:["33cce2d200da4626bbbbf5513594120c","6253ed4309e64a42b37005ebfb8edced"]}}) db.getCollection('label').remove({"canDelete":1}) db.getCollection('label').remove({"companyId":{$exists:true}}) db.label.save([{ "_id" : "1", "chnName" : "部门", "createTime" : NumberLong("1521705391609"), "updateTime" : NumberLong("1521705391609"), "showState" : NumberInt(1), "canDelete" : NumberInt(0), "canModify" : NumberInt(0) }, { "_id" : "2", "chnName" : "邮箱", "createTime" : NumberLong("1521705391610"), "updateTime" : NumberLong("1521705391610"), "showState" : NumberInt(1), "canDelete" : NumberInt(0), "canModify" : NumberInt(0) }] )

//这里save也可用insert替换,貌似insert是_id数据库原有值时用

插入单条数据

> var document = db.collection.insertOne({"a": 3}) > document { "acknowledged" : true, "insertedId" : ObjectId("571a218011a82a1d94c02333") }

插入多条数据

> var res = db.collection.insertMany([{"b": 3}, {'c': 4}]) > res { "acknowledged" : true, "insertedIds" : [ ObjectId("571a22a911a82a1d94c02337"), ObjectId("571a22a911a82a1d94c02338") ] }

orgId:a7e7e48cab1c4ee385e1cc78ad4fb009passportId:312953f38a1b4a00a2c35f9050534f79

Query query=new Query(Criteria.where("companyId").is(companyId).and("groupId").ne(null).ne("").exists(true)); query.with(new Sort(Sort.Direction.DESC, "sort")); return find(query); db.getCollection('book_attr_templ').find({"org_id":"a7e7e48cab1c4ee385e1cc78ad4fb009","ekey":{$nin:["uo_name","uo_position","uo_phone","uo_email"]}})

 

转载于:https://www.cnblogs.com/shaozhiqi/p/11535098.html

相关资源:MONGODB基本操作封装类
最新回复(0)