thinkphp6 版本 mongodb 连表查询 案例?

thinkphp6 版本 mongodb 连表查询 案例?,第1张

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

*/

}

创建Mongodb数据库 由于Mongodb不是关系型数据库文件,实际上,它并不存在传统关系型数据库中的所谓“数据库”的概念,但不用担心,当你第一次新增数据时,mongodb就会以collection集合的形式进行保存和新建,而不需要你手工去新建立。以后可以去后盾人上面看看哦⊙∀⊙!里面有教学是哦

据我所知,目前mongoDB没有“或”这个东西

但我刚才在网上查了下

发现了下面的信息,你参考下吧

在mongodb中有$or *** 作符的,官网中给出的例子如下:

Simple:

db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } )

With another field

db.foo.find( { name : "bob" , $or : [ { a : 1 } , { b : 2 } ] } )

The $or operator retrieves matches for each or clause individually and eliminates duplicates when returning results. A number of $or optimizations are planned for 1.8. See this thread for details.

$or cannot be nested.


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

原文地址: http://outofmemory.cn/sjk/6699678.html

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

发表评论

登录后才能评论

评论列表(0条)

保存