MongoDB基础操作

插入

Insert:

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

 

查看插入数据:

 

image.png
image.png

Save:

image.png
image.png

 

现在有两条数据:

 

image.png
image.png

 

插入定义好的变量:

 

image.png
image.png

查看结果:

 

image.png
image.png

InsertOne:

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

查看结果:

 

image.png
image.png

insertMany:

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

Sava与insert:

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

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

 

image.png
image.png

使用save则已是更新成功:

 

image.png
image.png

查看结果:

 

image.png
image.png

Update

默认更新一条:
写法一:

 

image.png
image.png

更新结果:

 

image.png
image.png

写法二:

 

image.png
image.png

更新结果:

 

image.png
image.png

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

 

image.png
image.png

查看执行结果:

 

image.png
image.png

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

image.png
image.png

 

image.png
image.png

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

Update并且添加部门节点

image.png
image.png

查看结果:

 

image.png
image.png

 

修改设计部为产品部:

 

image.png
image.png

执行结果:

 

image.png
image.png

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

给我添加一辆宝马:

 

image.png
image.png

 

查看结果:

 

image.png
image.png

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

 

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
image.png

更新结果:

 

image.png
image.png

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

 

image.png
image.png
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

也可简写:

 

image.png
image.png

跟新结果:

 

image.png
image.png

updateMany:

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

 

image.png
image.png

 

更新结果:

 

image.png
image.png

当然updateOne是更新单个文档了

删除remove

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

image.png
image.png


语法:

image.png
image.png


查看结果:

image.png
image.png

 

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

 

image.png
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
image.png

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

 

image.png
image.png

 

准备以下数据:

 

image.png
image.png

查询语句:

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

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

 

image.png
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
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
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
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:a7e7e48cab1c4ee385e1cc78ad4fb009
passportId: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"]}})

 

posted @ 2019-09-17 16:37  ~清风煮酒~  阅读(190)  评论(0编辑  收藏  举报