MongoDB实例在多进程中使用

MongoDB实例在多进程中使用,第1张

个人在使用MongoDB连接时,会使用单例模式,只创建一个MongoDB连接对象。在pymongo中,MongoDB连接是默认线程共享的,一个连接对象就已经足够。

但是在多进程中调用同一个连接对象时却会导致错误,不能从主进程fork出mongo连接。

因此,在多进程中调用MongoDB连接时,不能使用单例模式,应该为每个进程创建新的MongoClient对象才行。

类似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()

# https://www.cnblogs.com/cangqinglang/p/14858131.html

public function index(){

// 方法1 您可以使用 $toObjectId聚合实现此目的,该聚合仅将字符串ID转换为mongoose objectId

// https://blog.csdn.net/az9996/article/details/110141289

// 多表查询 https://blog.csdn.net/eric_to/article/details/90093806

$pipeline = [

['$addFields'=>['company_id'=>['$toObjectId'=>'$company_id']]],

['$match'=>['$expr'=>['$eq'=>["\$company_id", "$\$company_Id"]]]],

]

$pipelines = [

// ['$match'=>["_id"=>new \MongoDB\BSON\ObjectId("5cb7e580a6c98abc468b458b")]],

// ['$match'=>["name"=>"xxx限公司"]],

[

'$lookup'=>[

'from'=>'oa_company_member_pay',

"let"=>["company_Id"=>"\$_id" ],

"pipeline"=>$pipeline,

'as'=>'company_pay'

],

]

]

// php 执行 产生了 2571 条数据 但是 用 db.runCommand() 执行 打印的 sql 语句 只有 101 条记录

dump(Db::connect('mongo')->name('oa_company')->cmd([

'aggregate'=>'oa_company',

'pipeline'=>$pipelines,

'explain'=>false,

]))

dump(Db::connect('mongo')->getLastSql())

// 以下 mongodb sql 在 数据库 查询 通过 有 2571 条记录

// db.getCollection("oa_company").aggregate([

// {

// "$lookup": {

// "from": "oa_company_member_pay",

// "let": { "company_Id": "$_id" },

// "pipeline": [

// { '$addFields': { "company_id": { "$toObjectId": "$company_id" }}},

// { "$match": { "$expr": { "$eq": [ "$company_id", "$$company_Id" ] } } }

// ],

// "as": "company_member_pay"

// }

// }

// ])

// 以下 mongodb sql 在 数据库 查询 通过 只有 101 条记录

// db.runCommand({

// "aggregate":"oa_company",

// "pipeline":[

// {

// "$lookup":{

// "from": "oa_company_member_pay",

// "let": { "company_Id": "$_id" },

// "pipeline": [

// { '$addFields': { "company_id": { "$toObjectId": "$company_id" }}},

// { "$match": { "$expr": { "$eq": [ "$company_id", "$$company_Id" ] } } }

// ],

// "as": "company_member_pay"

// }

// }

// ],

// "explain":false

// })

// 方法2 或者使用$toString聚合 可以通过 2571

// db.getCollection('oa_company').aggregate([

// { "$addFields": { "companyidStr": { "$toString": "$_id" }}},

// { "$lookup": {

// "from": "oa_company_member_pay",

// "localField": "companyidStr",

// "foreignField": "company_id",

// "as": "pay"

// }}

// ])

/*

$pipelines = [

// ['$match'=>["_id"=>new \MongoDB\BSON\ObjectId("5cb7e580a6c98abc468b458b")]],

// ['$match'=>["name"=>"xxx有限公司"]],

['$addFields'=>['companyidStr'=>['$toString'=>'$_id']]],

[

'$lookup'=>[

'from'=>'oa_company_member_pay',

'localField'=>'companyidStr',

'foreignField'=>'company_id',

'as'=>'company_pay'

],

]

]

// php 执行 产生了 2571 条数据 但是 用 db.runCommand() 执行 打印的 sql 语句 只有 101 条记录

dump(Db::connect('mongo')->name('oa_company')->cmd([

'aggregate'=>'oa_company',

'pipeline'=>$pipelines,

'explain'=>false,

]))

dump(Db::connect('mongo')->getLastSql())

// db.cmd({"aggregate":"oa_company","pipeline":[{"$addFields":{"companyidStr":{"$toString":"$_id"}}},{"$lookup":{"from":"oa_company_member_pay","localField":"companyidStr","foreignField":"company_id","as":"company_pay"}}],"explain":false})

// 下面 执行 不可以 只有 101 条数据

db.runCommand({"aggregate":"oa_company","pipeline":[{"$addFields":{"companyidStr":{"$toString":"$_id"}}},{"$lookup":{"from":"oa_company_member_pay","localField":"companyidStr","foreignField":"company_id","as":"company_pay"}}],"explain":false})

*/

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12087451.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存