mongodb查询(mongodb查询文档中的字段)

本篇文章给大家谈谈mongodb查询,以及mongodb查询文档中的字段对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

mongodb查询实例

类似MySQL的select * from EVI_EGZ_GEAR_DAY where quantity0=27

类似MySQL的select * from EVI_EGZ_GEAR_DAY where lastModify"2020-07-02T16:08:45+08:00"

db.EVI_BIZ_DAYINFO.find({"ReportDay":{$gte:20200601 ,$lte: 20200630},"LoginID":"304095318","Is_Statistics":1})

操作 格式 范例 RDBMS中的类似语句

等于 {铅让key:value} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'

小于 {key:{$lt:value}} db.col.find({"likes":{$lt:50}}).pretty() where likes 50

小于或等于 {key:{$lte:value}} db.col.find({"likes":{$lte:50}}).pretty() where likes = 50

大于 {key:{$gt:value}} db.col.find({"likes":{$gt:50}}).pretty() where likes 50

大于或等于 {key:{$gte:value}} db.col.find({"likes":{$gte:50}}).pretty() where likes = 50

不等于 {key:{$ne:value}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

类似MySQL的select loginId from EVI_EGZ_GEAR_DAY group by loginId

类似MySQL的select loginId,count(*) from EVI_EGZ_GEAR_DAY where loginId=100870655 group by loginId

5.db.EVI_RPT_MARKETMON_ANALYSIS.find({"reportTime":"201810","areaParentCode":"430000","machineCode":"MT0000000212","machineType":"2","nationCode":"CN","calcType":"0"},

{"areaName":1,"machineName":1,"workTime":1,"equCount":1,"workCount":1,"restCount":1,"highWorkCount":1,"avgWorkTime":1,"workRate":1,"calcType":"1"}).sort({ equCount:-1 })

db.EVI_BIZ_DAYINFO.aggregate([{

                        "$match": {

                            "ReportTime" : ISODate("2020-07-01T00:00:00.000+08:00"),

                            "Is_Statistics": 1,

                            "IsOnline": 1,

                            "MachineType_Code1" : "MT0000000276"// 按照一级槐桥局机型分类统计,否则查询不到数据

   消岩                       }

                    },

                    {

                        "$group" : {

                            _id:{

                            countyCode :"$County_Code", 

                            cityCode :"$City_Code",

                            provinceCode :"$Province_Code", 

                            machineType1 :"$MachineType_Code1",

                            machineType2 :"$MachineType_Code2",

                            nationCode:"$Nation_Code"

                            },

                            highWorkCount : {$sum: { $cond: [ {$gte: [ "$WorkTime",8] },

                                    1,

                                    0 ] }},

                            countWork: {

                                $sum: '$IsWork'

                            },

                            workTime:  {

                                $sum: '$WorkTime'

                            },

                            equCount:{

                                $sum: 1

                            }

                        }

                    }

                ])

db.EVI_BIZ_DAYINFO.find({"ReportDay":20200201,"LoginID":"302060888"})

db.EVI_BIZ_DAYINFO.aggregate([{

                        "$match": {"LoginID":"101065868",

                                    "ReportDay":{$gte: 20200701,$lte:20200731}

                        }

                    },

                    {

                        "$group": {

                            _id:{

                                LoginID:"$LoginID",

                                ReportDay:"$ReportDay"

                            },

                            },

                        WorkTimes:{

                            $sum: "$WorkTime"

                        },

                        totalDay:{

                            $sum: {$cond: [  { $gt: ["$WorkTime",0]},  1,  0 ]}

                        }

                        }

                    },

                    {"$match": {WorkTimes:{$gt:0}}}

])

db.EVI_ALARM_FLEET.update({"reportTime":ISODate("2020-08-21T00:00:00.000+08:00")},{$set:{"reportTime":ISODate("2020-08-22T00:00:00.000+08:00")}},false,true)

db.EVI_ALARM_FLEET.update({"reportTime":ISODate("2020-08-21T00:00:00.000+08:00")},{$set:{"reportTime":ISODate("2020-08-22T00:00:00.000+08:00")}})

db.EVI_BIZ_DAYINFO.find({$or:[{"LoginID":"104259298"},{"LoginID":"132349918"}]})

db.configuration.find({"envType":"hxevi.test","key":{$regex:/mail/}})

相当于MySQL的select * from configuration where envType='hxevi.test' and key like '%mail%'

db.EVI_BIZ_DAYINFO.aggregate([

        {

            "$match": {

                "ReportTime":{"$gte":ISODate("2021-01-18T00:00:00.000+08:00"),"$lte":ISODate("2021-01-24T00:00:00.000+08:00")},

                "Is_Statistics": 1,

                "LoginID": "101102108"

            }

        },

        {"$sort": {"ReportTime": -1}},

        {

            "$group": {

                "_id": "$LoginID",

                "WorkTime": {

                    "$sum": "$WorkTime"

                },

                "IdleTime": {

                    "$sum": "$IdleTime"

                },

                "FuelConsume": {

                    "$sum": "$FuelConsume"

                },

                "IdleFuelConsume": {

                    "$sum": "$IdleFuelConsume"

                },

                "ReportTime": {"$first": "$ReportTime"},

                "City_Code": {"$first": "$City_Code"},

                "City_Name": {"$first": "$City_Name"},

                "County_Code": {"$first": "$County_Code"},

                "County_Name": {"$first": "$County_Name"},

                "Nation_Code": {"$first": "$Nation_Code"},

                "Nation_Name": {"$first": "$Nation_Name"},

                "Province_Code": {"$first": "$Province_Code"},

                "Province_Name": {"$first": "$Province_Name"},

                "Latitude": {"$first": "$Latitude"},

                "Longitude": {"$first": "$Longitude"},

                "TotalIdleFC": {"$first": "$TotalIdleFC"},

                "TotalIdleTime": {"$first": "$TotalIdleTime"},

                "TotalWorkTime": {"$first": "$TotalWorkTime"},

                "TotalFC": {"$first": "$TotalFC"},

                "DataVersion": {"$addToSet": '$DataVersion'},

                "Machine_Model": {"$addToSet": '$Machine_Model'},

                "MachineType_Code1": {"$addToSet": '$MachineType_Code1'},

                "MachineType_Code2": {"$addToSet": '$MachineType_Code2'},

                "MachineType_Code3": {"$addToSet": '$MachineType_Code3'},

                "MachineType_Name1": {"$addToSet": '$MachineType_Name1'},

                "MachineType_Name2": {"$addToSet": '$MachineType_Name2'},

                "MachineType_Name3": {"$addToSet": '$MachineType_Name3'},

                "Serialno": {"$addToSet": '$Serialno'},

                "Customer_Code": {"$addToSet": '$Customer_Code'},

                "Customer_Name": {"$addToSet": '$Customer_Name'},

                "Customer_Tel": {"$addToSet": '$Customer_Tel'},

                "SaleDealer": {"$addToSet": '$SaleDealer'},

                "SaleDealer_Code": {"$addToSet": '$SaleDealer_Code'},

                "SvrDealer": {"$addToSet": '$SvrDealer'},

                "SvrDealer_Code": {"$addToSet": '$SvrDealer_Code'},

                "Register_Date": {"$addToSet": '$Register_Date'},

                "sumIsOnline": {"$sum": '$IsOnline'}

            }

        },

        {

            "$project":{

                "LoginID":"$_id",

                "WorkTime":"$WorkTime",

                "IdleTime":"$IdleTime",

                "FuelConsume":"$FuelConsume",

                "IdleFuelConsume":"$IdleFuelConsume",

                "City_Code":"$City_Code",

                "City_Name": "$City_Name",

                "County_Code": "$County_Code",

                "County_Name": "$County_Name",

                "Nation_Code": "$Nation_Code",

                "Nation_Name": "$Nation_Name",

                "Province_Code": "$Province_Code",

                "Province_Name": "$Province_Name",

                "Latitude": "$Latitude",

                "Longitude": "$Longitude",

                "TotalIdleFC": "$TotalIdleFC",

                "TotalIdleTime": "$TotalIdleTime",

                "TotalWorkTime": "$TotalWorkTime",

                "TotalFC": "$TotalFC",

                "DataVersion": {"$arrayElemAt":["$DataVersion",0]},

                "Machine_Model": {"$arrayElemAt":["$Machine_Model",0]},

                "MachineType_Code1": {"$arrayElemAt":["$MachineType_Code1",0]},

                "MachineType_Code2": {"$arrayElemAt":["$MachineType_Code2",0]},

                "MachineType_Code3": {"$arrayElemAt":["$MachineType_Code3",0]},

                "MachineType_Name1": {"$arrayElemAt":["$MachineType_Name1",0]},

                "MachineType_Name2": {"$arrayElemAt":["$MachineType_Name2",0]},

                "MachineType_Name3": {"$arrayElemAt":["$MachineType_Name3",0]},

                "Serialno": {"$arrayElemAt":["$Serialno",0]},

                "Customer_Code": {"$arrayElemAt":["$Customer_Code",0]},

                "Customer_Name": {"$arrayElemAt":["$Customer_Name",0]},

                "Customer_Tel": {"$arrayElemAt":["$Customer_Tel",0]},

                "SaleDealer": {"$arrayElemAt":["$SaleDealer",0]},

                "SaleDealer_Code": {"$arrayElemAt":["$SaleDealer_Code",0]},

                "SvrDealer": {"$arrayElemAt":["$SvrDealer",0]},

                "SvrDealer_Code": {"$arrayElemAt":["$SvrDealer_Code",0]},

                "Register_Date": {"$arrayElemAt":["$Register_Date",0]},

                "IsOnline": {"$cond": {

                    "if":{"$gt":["$sumIsOnline",0]},"then":1,

                    "else":0

                }}

            }

        }],

    { allowDiskUse: true }).pretty()

[img]

MongoDB 查询技巧(2) - null

MongoDB 里面存的 文档, 字段可以 不存在 , 可以 为 null , 可以是 具体的值

在开发过程中,经常需要去 查询某个字段有值的所有文档 , 那么此时怎么写才是正确且简单的呢?

新建一个集合 yu_fa_ce_shi

新增三条数据,如下图所示

a desc 字段为 null

b desc 字段有值,是一个字符串

c desc字段不存在

我们之前 查询有值 的场景是这样写的

功能是正常的

现在我们来研究一下有没有简凳和薯化的写法

执行之后可以看到,a b 都查询出来了,也就是说

eq(null) 等价于 有值且为null 和 字段不存在 两种场景的并集(也就是 in )

再看一下反向的

执行之后得到结论: ne(null) 等价棚瞎于 有值且不为null

由上可知 ne(null) 找到的是 有值且不为null , 但枣者是因为 MongoDB 的字段可以随便存,类型没有限制

所以, ne(null) 对取出来的值类型没有做限制

那么,如果想要限制一下,比如: 有值且为 string 这种查询怎么写呢?

经过了解, MongoDB 有一种操作符叫 type type

截图看一下

所以我们的查询语句变为

结果如下,是符合我们预期的

那么问题来了,如何找到 有值且为null 呢?

根据上面的 string , 同理可知

type

MongoDB 查询技巧(1) - 字段相等

在工作中有时遇到这么一种场景 找出那些字段A和字段B相等的数据

刚开始只能想到自己联表查自己,后面研究了一下,发现了更简单的方法,分享出来

假设我们有以下测试数据

是一张 暗恋表 ,有人喜欢别人,有人自恋

我们现在想要 找出那些自恋的人

lookup语法

根据语法和常规思路,我们写下了如下查询

( $unwind 是用来拍平数据结构的,因为联表之后,嵌套字段是一个列表)

查询之后发现 结果为空

嗯?我们把 match 删了看一下结果是啥

可以看到,联表的确是生效了,但是我们要找的是 自恋 , 而不是 有人爱 ,

联表之后还差一步,就是找到 name 等于 love_yourself.name 的记录

但是,等等,貌似又回到了最初的问题: 找到字段相等的数据

所以,联表也遇到同样的问题,也就是联表并没有解决这个问题,所以此路不通

然后在官方文档的 query 里面找啊找,发现了 expr 的操作,例子很有意思

然后我想,我把 gt 换成 eq 行不行呢

把查肆芹询语句换一下

结果如下

bingo! 可以了

这个问题暂时解决了,但是平时工作中,经常遇到 ObjectId 和 String 互相匹配的问题

那么在这种场景下,语句如何写呢?

我们准备好测试数据

值一样的,标记为了同一个颜色

我们先来试一下,思路不变,能不能查出来(语句有变化,字段换成了 _id )

很遗憾,不能

此时还是在 expr 的文档里看到了这么一个例子

很明显, $expr 的 参数列表,参数类型可以此族是 转换函数,不一定就森雹弊需要是老老实实的字段, 如图中就是用了 $cond 作为条件函数来转换字段,

那么我把 ObjectId 转为 String 类型的是不是就可以了呢

来试一下以下的查询语句

结果如下

OK,这个场景也解决了

利用MongoDB进行地理坐标查询

LBS的应用在生活中已经非常常见,我们打车,叫外卖,查个地图之类的都会查询附近的相关坐标位置,mongodb提供了原生的二维地图查询,极大地方便了大家的开发。

假定我们有一个定义了位置信息的集合 location ,给定 a , b , c , d 节点.

这四个点的位置如图所示:

为 location 的 position 字段指定 2d 索引。

我们假定找出坐标点(0,0)附近半径为 10 的所有坐标点:

其中 $near 表示中心坐标点,而 $maxDistance 表示最远的路径10.

再增加一个坐标点E(5,0),然后再次查明枝物询

由查询可见,mongodb会将数据按照离中心点的距离进行排序,约近的坐标点顺序越靠前。

除此之外,使用 $center 函数也可以完成同样的动作。

mongodb还支持选定空间(box)的查询,查询在某一个矩形范围内的坐标点:

mongo在地理查询上还支持多边激液形( $polygon )等操作,丰富的操作极大提升了地理信息系统的开发。结合 redis 的 3.2 版本可以制作出很丰富的地理信息应用搭态了。

关于mongodb查询和mongodb查询文档中的字段的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表