MongoDB的简单操作结合Robo 3T 1.4.3工具进行查询。
常用的正则表达式
/* 29 */ 正则表达式 /\* [0-9]* \*/ "_id" : ObjectId("5f3d05cdfd2aa9a8a7"), 正则表达式 \"([^\"]*_id)\".*,
使用方法:查询结果去掉注释和不需要的字段后可直接修改为json放入到MySQL中查询。
查询说明
MongoDB 查询数据的语法格式:db.collection.find(query, projection) 说明: 1 collection:链接,可以使用 db.getCollection('表名') 或者 db.表名 2 find:查询,可以使用findOne,find/findMany 3 query:查询条件。 3.1 and关系使用","间隔; 3.2 or关系使用,$or:[{"字段1":"字段值1"},{"字段2": "字段值2"}] 4 projection:使用投影操作符指定返回的键,缺省是默认所有字段显示 操作符: {"字段1":"字段值"} 相当于 字段1=字段值1; {"字段1":{$ne:"字段值1"}} :不等于 相当于 字段1 != 字段值1
{"字段1":{$lt:"字段值1"}} :小于 相当于 字段1 <字段值1 {"字段1":{$lte:"字段值1"}} :小于或等于 相当于 字段1 <= 字段值1 {"字段1":{$gt:"字段值1"}} :大于 相当于 字段1 > 字段值1 {"字段1":{$gte:"字段值1"}} :大于或等于 相当于 字段1 >= 字段值1 {"字段1":/字段值1/} :模糊查询 相当于 字段1 like '%字段值1%' {"字段1":/^字段值1/} :以开始 相当于 字段1 like '字段值1%' {"字段1":/字段值1$/} :以结束 相当于 字段1 like '%字段值1'
例子: db.getCollection('集合名称').find({name:/R4300$/});
{"字段1":/^字段值1^/} :不包含 相当于 字段1 not like '%字段值1%'
匹配null :{"字段1":null} 使用distinct: 表名.distinct('字段1'); in/not in .find({'字段1' : {‘$in’ : ['字段值1', '字段值2', '字段值3']}}); .find({'字段1' : {‘$nin’ : ['字段值1', '字段值2', '字段值3']}}); exists {字段1:{$exists:'字段值1'}} $all匹配所有:{字段1:{$all:[字段值1,字段值2]}} ,必须都满足才可以 多层关系查询:{"字段1.子级字段2":/子级字段值1/} 或者 {"字段1":{'$elemMatch':{'子级字段1':/子级字段值1/}}}
太麻烦了,来个实际点的操作。
=查询
db.getCollection('集合').find({"name":'name值'},{_id:0,name:1})
模糊查询
db.getCollection('集合').find({"name":/name值/},{_id:0,name:1})
{_id:0,name:1} 查询结果展示那些字段的值
查询数量
db.getCollection('集合').find({"name":/name值/},{_id:0,name:1}).count()
in查询
db.getCollection('集合名称').find({'字段' : {'$in' : [限制条件1,限制条件2]},'数组字段名称':{$size:长度限制}})
db.getCollection('集合名称').find({'_id' : {'$in' : [ObjectId("63f33758daec1c9f"),ObjectId("63f33aec1c6f")]},'attrs':{$size:9}})
多条件and查询
db.getCollection('集合').find({"name":'name值',"code":'Code123'},{_id:0,name:1,code:1})
更新操作
更新一条记录的某个字段
db.getCollection('集合名称').update({'code':'code123'},{$set:{'name':'name123'}})
更新记录中的数组中的某个字段
db.getCollection('集合名称').update({code:/ZZGX_B02F0302_/},{$set:{'属性数组.索引':'更新值'}})
比如
db.getCollection('集合名称').update({code:'007'},{$set:{"code":"code123","params.12.value":"new_value","name":"007"}},false,true)
增加了点小尾巴,用于更新多条;
数组中增加元素(单个,不管数组中是否存在也往里放,这样的操作有可能造成里面有多个关键词的数据)
db.getCollection('集合名称').find({'类型':ObjectId("xxxx")}).forEach( function(item) { db.getCollection('集合名称').update({"_id":item._id}, {$push:{"params":{ "key" : "key123", "value" : "123" } }})})
数组中增加多个元素($addToSet 没有就添加,有不添加)
db.getCollection('集合名称').find({'_id':ObjectId("xxxx")}).forEach( function(item) { db.getCollection('集合名称').update({"_id":item._id}, {$addToSet:{"params":{$each: [{ "len" : 255, "notnullable" : false, "enums" : [], "name" : "业务名称", "field" : "business_name", "dtype" : "string", "dvalue" : "" }, { "len" : 255, "notnullable" : false, "enums" : [], "name" : "负责科室", "field" : "resp_office", "dtype" : "string", "dvalue" : "" }, { "len" : 255, "notnullable" : false, "enums" : [], "name" : "负责部门", "field" : "resp_department", "dtype" : "string", "dvalue" : "" }, { "len" : 255, "notnullable" : false, "enums" : [], "name" : "负责人", "field" : "resp_people", "dtype" : "string", "dvalue" : "" }, { "len" : 255, "notnullable" : false, "enums" : [], "name" : "联系方式", "field" : "contact_info", "dtype" : "string", "dvalue" : "" }]} }})})
这个地方在mysql中的查询可以这样
select json_unquote(json_extract(t.params,'$[0].value')) from it_device t where 1=1;
当然简单的json字段查询也可以这样 数据表字段->>'$.json字段'
例如 select power->>'$.powerType' from power_history where 1=1;
params:通过查询json格式的数据导入到mysql中的属性数组字段
但是:这块查询的时候有个问题,MongoDB中的数组字段需要排序。怎么排序我还不会,后续再补充下。
使用记录中的字段更新另一个字段
db.getCollection('集合名称').find({'code': {'$in' : ['CT_SV','CT_ST']}}).forEach(function(item){ db.getCollection('集合名称').update({"_id":item._id}, {"$set": {"name":item.desc}},false,true) })
推荐文章
发表评论