首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB\Driver php如何在第一个集合中使用过滤器进行内部连接

MongoDB\Driver php如何在第一个集合中使用过滤器进行内部连接
EN

Stack Overflow用户
提问于 2019-10-29 17:29:53
回答 1查看 531关注 0票数 1

我需要在两个集合之间进行连接,同时我需要为第一个集合执行筛选器,例如:

代码语言:javascript
复制
... // code inside my classe 
$this->MDBManager = new MongoDB\Driver\Manager("mongodb:// xxxxx: xxxxx @" . $this->host);
$filter = array ("date", array('$gte' =>str_replace("-","/", "2019-10-5") , '$lte' => str_replace("-","/",  2019-10-15)))
$this->MDBQuery = new MongoDB\Driver\Query($filters, $options);
$this->results = $this->MDBManager->executeQuery("mydb.colllection1", $this->MDBQuery);

这是我的第一个集合,我需要加入soconde集合id来匹配集合1中相同的productEnsembleId属性值。

连接请求只需要在一个请求中。

感谢你的帮助。

欲知更多详情:

示例收集1:

代码语言:javascript
复制
{
  "_id": "5db8683c877c34001559f192",
  "id": "1BuVJCLGIUIcDXfBQVlpzccAP6r2JRQPGL4wHTEfPildnnWU5gUh8oymfJM2a6wOW117sTbzWJGKLNaRCZ7uMNHA2CnBjT4PeM44B9QaNYMZfg1BiiBa5JYBRLxMLxFTOY88PDFm4U4yDn9iPnljRnfeqpu9ZBl7fGS4tnnlmuz2ntlXb6cFFrFmQIo8EpDOwr5LLyaSrI67mLUya94WMUnDOojXpf4UAjcmMTayM4x9fmla_00001572366396",
  "userId": "DEXpMPBstW37YkixF5e6yPeVpkElumYN1nyw0rjjcPy6vf8mdUHXzIg8KMvy0KegxThD5LgKS6WnuhvPwbLqa3aoyhVgIOhk0huqvxmQ0ctBFMVZZyaPkADdGmWUFM10OhTo919uQOb4QgZLZjtDOnTkcmLUfB6uLFdfNmaXLRNaRs6w4GI9ZDwnuVWAgQ3uajWnUTigq1gXbKGcI4G4Es8cBKZsVQhxsKzOqLFGXDONbQEX_00000000000000",
  "productEnsembleId": "8FMOBUO8TArv0PcyQ2GSDhGPWRxMjMSLtCOcRV21G04yoCKq1i3POwPqEWwj6wJoeydY28thZMWmO4uP7Yha2xNMV1m0zmjfqtZgsKmTA1Qghku3I0rekTJ51cH2XlXan4zUV5hjjEolRWjREOR7N9DD9sCvoQF2kr3EhI553RYIdwgivRtYJYH4g6oqVv2nrob3KbrLwd95MbNnzwmCqGNM20q0zgF8HUJjCxIfphNyVcwO_00001571329166",
  "date": "2019/11/01",
  "status": "En cours"
}

前拼贴说明2:

代码语言:javascript
复制
   {
  "_id": "5da8948e877c34001529a7f2",
  "id": "8FMOBUO8TArv0PcyQ2GSDhGPWRxMjMSLtCOcRV21G04yoCKq1i3POwPqEWwj6wJoeydY28thZMWmO4uP7Yha2xNMV1m0zmjfqtZgsKmTA1Qghku3I0rekTJ51cH2XlXan4zUV5hjjEolRWjREOR7N9DD9sCvoQF2kr3EhI553RYIdwgivRtYJYH4g6oqVv2nrob3KbrLwd95MbNnzwmCqGNM20q0zgF8HUJjCxIfphNyVcwO_00001571329166",
  "name": "ensemble 2",
  "image": "fjO9sb3FUmDFhgWn49v1Io5Oa5sdFyL7KZRVzsH0n06n7GtNqIPdFSfDT67BSIvfYSmdTh7IoYyize3SDX169cas4MWMwVWLsF989ZWy76ANsYS4tkLS5OYR1i2TrqXjP40WDCcWvr6OkQapgzuk4hAISx7Mwf6Wp2Z3krzjn72PrTXUDmG7nDrp7VKDrsonCVqkmGs7lAwocdEeghWs7NUVkMdIGMjWDVo8u3wlClzs2e5X_00001571329177",
  "produits": null
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-29 19:45:52

因此,假设您希望在第一个集合中获得一个文档的联接结果,下面是一个mongo查询。

代码语言:javascript
复制
db.col1.aggregate([
  { $match: { "_id": "5db8683c877c34001559f192" } },
  { $lookup: {
      from: "col2",
      localField: "productEnsembleId",
      foreignField: "id",
      as: "col2_data"  
    }
  }
])

结果看起来..。

代码语言:javascript
复制
{
    "_id" : "5db8683c877c34001559f192",
    "id" : "1BuVJCLGIUIcDXfBQVlpzccAP6r2JRQPGL4wHTEfPildnnWU5gUh8oymfJM2a6wOW117sTbzWJGKLNaRCZ7uMNHA2CnBjT4PeM44B9QaNYMZfg1BiiBa5JYBRLxMLxFTOY88PDFm4U4yDn9iPnljRnfeqpu9ZBl7fGS4tnnlmuz2ntlXb6cFFrFmQIo8EpDOwr5LLyaSrI67mLUya94WMUnDOojXpf4UAjcmMTayM4x9fmla_00001572366396",
    "userId" : "DEXpMPBstW37YkixF5e6yPeVpkElumYN1nyw0rjjcPy6vf8mdUHXzIg8KMvy0KegxThD5LgKS6WnuhvPwbLqa3aoyhVgIOhk0huqvxmQ0ctBFMVZZyaPkADdGmWUFM10OhTo919uQOb4QgZLZjtDOnTkcmLUfB6uLFdfNmaXLRNaRs6w4GI9ZDwnuVWAgQ3uajWnUTigq1gXbKGcI4G4Es8cBKZsVQhxsKzOqLFGXDONbQEX_00000000000000",
    "productEnsembleId" : "8FMOBUO8TArv0PcyQ2GSDhGPWRxMjMSLtCOcRV21G04yoCKq1i3POwPqEWwj6wJoeydY28thZMWmO4uP7Yha2xNMV1m0zmjfqtZgsKmTA1Qghku3I0rekTJ51cH2XlXan4zUV5hjjEolRWjREOR7N9DD9sCvoQF2kr3EhI553RYIdwgivRtYJYH4g6oqVv2nrob3KbrLwd95MbNnzwmCqGNM20q0zgF8HUJjCxIfphNyVcwO_00001571329166",
    "date" : "2019/11/01",
    "status" : "En cours",
    "col2_data" : [
        {
            "_id" : "5da8948e877c34001529a7f2",
            "id" : "8FMOBUO8TArv0PcyQ2GSDhGPWRxMjMSLtCOcRV21G04yoCKq1i3POwPqEWwj6wJoeydY28thZMWmO4uP7Yha2xNMV1m0zmjfqtZgsKmTA1Qghku3I0rekTJ51cH2XlXan4zUV5hjjEolRWjREOR7N9DD9sCvoQF2kr3EhI553RYIdwgivRtYJYH4g6oqVv2nrob3KbrLwd95MbNnzwmCqGNM20q0zgF8HUJjCxIfphNyVcwO_00001571329166",
            "name" : "ensemble 2",
            "image" : "fjO9sb3FUmDFhgWn49v1Io5Oa5sdFyL7KZRVzsH0n06n7GtNqIPdFSfDT67BSIvfYSmdTh7IoYyize3SDX169cas4MWMwVWLsF989ZWy76ANsYS4tkLS5OYR1i2TrqXjP40WDCcWvr6OkQapgzuk4hAISx7Mwf6Wp2Z3krzjn72PrTXUDmG7nDrp7VKDrsonCVqkmGs7lAwocdEeghWs7NUVkMdIGMjWDVo8u3wlClzs2e5X_00001571329177",
            "produits" : null
        }
    ]
}

这是集合1和集合2的组合。如果您想要收集1中的所有记录,只需删除$match条件即可。

编辑:包含上面相同查询的PHP .

若要在PHP页面中使用此查询,请参见下面。本例假设使用最新的MongoDB驱动程序和策略,包括使用PHP .

代码语言:javascript
复制
<?php

require 'vendor/autoload.php';

$client = new MongoDB\Client('mongodb://johndoe:mypassword@localhost:27017');
$collection = $client->ensemble->col1;

$cursor = $collection->aggregate(
  array(
    array( '$match' => array( '_id' => '5db8683c877c34001559f192' ) ),
    array(
      '$lookup' => array(
      'from' => 'col2',
      'localField' => 'productEnsembleId',
      'foreignField' => 'id',
      'as' => 'col2_data'
      )   
    )   
  )
);

foreach($cursor as $document) {
  print_r($document);
}

?>

PHP结果:

代码语言:javascript
复制
MongoDB\Model\BSONDocument Object
(
    [storage:ArrayObject:private] => Array
        (
            [_id] => 5db8683c877c34001559f192
            [id] => 1BuVJCLGIUIcDXfBQVlpzccAP6r2JRQPGL4wHTEfPildnnWU5gUh8oymfJM2a6wOW117sTbzWJGKLNaRCZ7uMNHA2CnBjT4PeM44B9QaNYMZfg1BiiBa5JYBRLxMLxFTOY88PDFm4U4yDn9iPnljRnfeqpu9ZBl7fGS4tnnlmuz2ntlXb6cFFrFmQIo8EpDOwr5LLyaSrI67mLUya94WMUnDOojXpf4UAjcmMTayM4x9fmla_00001572366396
            [userId] => DEXpMPBstW37YkixF5e6yPeVpkElumYN1nyw0rjjcPy6vf8mdUHXzIg8KMvy0KegxThD5LgKS6WnuhvPwbLqa3aoyhVgIOhk0huqvxmQ0ctBFMVZZyaPkADdGmWUFM10OhTo919uQOb4QgZLZjtDOnTkcmLUfB6uLFdfNmaXLRNaRs6w4GI9ZDwnuVWAgQ3uajWnUTigq1gXbKGcI4G4Es8cBKZsVQhxsKzOqLFGXDONbQEX_00000000000000
            [productEnsembleId] => 8FMOBUO8TArv0PcyQ2GSDhGPWRxMjMSLtCOcRV21G04yoCKq1i3POwPqEWwj6wJoeydY28thZMWmO4uP7Yha2xNMV1m0zmjfqtZgsKmTA1Qghku3I0rekTJ51cH2XlXan4zUV5hjjEolRWjREOR7N9DD9sCvoQF2kr3EhI553RYIdwgivRtYJYH4g6oqVv2nrob3KbrLwd95MbNnzwmCqGNM20q0zgF8HUJjCxIfphNyVcwO_00001571329166
            [date] => 2019/11/01
            [status] => En cours
            [col2_data] => MongoDB\Model\BSONArray Object
                (
                    [storage:ArrayObject:private] => Array
                        (
                            [0] => MongoDB\Model\BSONDocument Object
                                (
                                    [storage:ArrayObject:private] => Array
                                        (
                                            [_id] => 5da8948e877c34001529a7f2
                                            [id] => 8FMOBUO8TArv0PcyQ2GSDhGPWRxMjMSLtCOcRV21G04yoCKq1i3POwPqEWwj6wJoeydY28thZMWmO4uP7Yha2xNMV1m0zmjfqtZgsKmTA1Qghku3I0rekTJ51cH2XlXan4zUV5hjjEolRWjREOR7N9DD9sCvoQF2kr3EhI553RYIdwgivRtYJYH4g6oqVv2nrob3KbrLwd95MbNnzwmCqGNM20q0zgF8HUJjCxIfphNyVcwO_00001571329166
                                            [name] => ensemble 2
                                            [image] => fjO9sb3FUmDFhgWn49v1Io5Oa5sdFyL7KZRVzsH0n06n7GtNqIPdFSfDT67BSIvfYSmdTh7IoYyize3SDX169cas4MWMwVWLsF989ZWy76ANsYS4tkLS5OYR1i2TrqXjP40WDCcWvr6OkQapgzuk4hAISx7Mwf6Wp2Z3krzjn72PrTXUDmG7nDrp7VKDrsonCVqkmGs7lAwocdEeghWs7NUVkMdIGMjWDVo8u3wlClzs2e5X_00001571329177
                                            [produits] => 
                                        )

                                )

                        )

                )

        )

)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58612654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档