操作案例干货合集
修改数据
db.getSiblingDB('cqust'); var 查询条件={'sno':2019000000}; var 更新条件={$set:{'body.weight':100,'name':'王小王'}}; db.students.update(查询条件, 更新条件);
如何去修改数据:首先我们要明确我们需要修改的数据处于哪一个位置,或者在哪一个字段,我们利用$set:{字段:新值},其实对于这个我们很明显的就是修改数组字段。
其他操作
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
利用字段的类型进行查询:$type
首先我们在查询条件里面加入我们需要查询的字段名,然后就是一个:{$type:'string'},也可以数字:2
MongoDB 中可以使用的类型如下表所示
类型 | 数字 | 备注 |
Double | 1 | |
String | 2 | |
Object | 3 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已废弃。 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript (with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Query with -1. |
Max key | 127 |
db.getSiblingDB('cqust'); var 查询条件={'body.weight':{$type:'string'}}; //2也可以 var 查询条件={'body.weight':{$type:'double'}}; //1也可以 var 返回条件={}; db.students.find(查询条件,返回条件)
这样所查询到的数据就会是我们所需要的数据类型数据
利用math.random进行随机数的生成,最后完成我们的更新操作
//修改2019000000的身高为 160-170以内的随机数 //修改2019000000的身高属性改为字符串类型 var 查询条件={'sno':2019000000}; var 更新操作={$set:{'body.height':Math.floor(Math.random()*10+160)}} db.students.update(查询条件, 更新操作);
//验证查询 var 查询条件={'sno':2019000000}; var 返回条件={}; var result=db.students.findOne(查询条件,返回条件);
利用数组进行更新操作,取出我们的数据,并将其转换为字符串类型的数据,然后利用$set:进行更新操作
//方法一:更新指定字段(重点掌握) result.body.height=String(result.body.height) var 更新操作={$set:{'body.height':result.body.height}} db.students.update(查询条件, 更新操作);
原子操作知识回顾
$set
用来指定一个键并更新键值,若键不存在并创建。
{ $set : { field : value } }
$unset
用来删除一个键。
{ $unset : { field : 1} }
$inc
$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。
{ $inc : { field : value } }
$push
把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。
用法:
{ $push : { field : value } }
$pushAll
同$push,只是一次可以追加多个值到一个数组字段内。
{ $pushAll : { field : value_array } }
$pull
从数组field内删除一个等于value值。
{ $pull : { field : _value } }
$addToSet
增加一个值到数组内,而且只有当这个值不在数组内才增加。
$pop
删除数组的第一个或最后一个元素
{ $pop : { field : 1 } }
$rename
修改字段名称
{ $rename : { old_field_name : new_field_name } }
$bit
位操作,integer类型
{$bit : { field : {and : 5}}}
偏移操作符
> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] } > t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true ) > t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }
//$exists 操作符,判断字段是否存在 db.test.insert({"name":'王小王'}) db.test.insert({"name":'王小王-123','gender':'男','age':19})
$exists:0(1)可以查询出前面的字段的存在性,如果存在那么属性为1,如果不存在那么属性就是0
//有name字段 db.test.find({'name':{$exists:1}}) //无name字段 db.test.find({'name':{$exists:0}})
$size:可以查询这个字段的信息是否为空
1.db.test.insert({myname:[1,2,3]}) //查询myname不为零的信息,而且存在的 db.test.find({myname:{$not:{$size:0},$exists:1}})
var cursor =db.students.find() for(var i=0;i<10;i++) { if(cursor.hasNext()) printjson(cursor.next()) }
打印输出我们想要的信息,有时候我们查询返回的是一个信息,但是我们想要向Python打印那样,格式化的输出,这样更有利于我们的理解和直观查看数据的特性
语法类似于JavaScript的语法,和Python不是很一样,但是逻辑思维douchabduo
var 查询条件 = {'grade':2019,'class':1,'major':'大数据'}; var cursor = db.students.find(查询条件); for(var i=0; i<cursor.length(); i++) { if (cursor[i].gender==0) print("姓名:"+cursor[i].name+"\t身高:"+cursor[i].body.height+"\t性别:女"); };
本期的数据查询案例就到这里,当我们学过大量的查询语法之后我们发现和MySQL有一种比较类似的现象就是,要想根据实际的场景来编写代码一定要有足够的的语法和熟练度这样才可以!