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)  })

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: