【问题标题】:$match query not working for lookup array in mongodb$match 查询不适用于 mongodb 中的查找数组
【发布时间】:2018-12-26 11:18:33
【问题描述】:

我在 mongodb 数据库中有两个表

 activityCountTbl contains data like

        {
             "_id": ObjectId("5c234f7e3250041280000ca3"),
             "activityId": ObjectId("5c0e27ee590a06bf08003c33"),
             "weekgroupId": ObjectId("5bfbddbcbb2c5645f8001495"),
             "squadronId": ObjectId("5bfc7b7ebb2c56c320002a0a"),
             "attendingCount": NumberInt(6),
             ....
        }  

        {
             "_id": ObjectId("5c234f7e3250041280000ca3"),
             "activityId": ObjectId("5c0e27ee590a06bf08003c33"),
             "weekgroupId": ObjectId("5bfbddbcbb2c5645f8001496"),
             "squadronId": ObjectId("5bfc7b7ebb2c56c320002a0a"),
             "attendingCount": NumberInt(6),
             ....
        } 
   squadronTbl contains data like

         {
           "_id": ObjectId("5c19ccb7590a060691000554"),
           "squadronCode": "336",
           "squadronName": "336TRS",
         }

         {
           "_id": ObjectId("5c19ccb7590a060691000556"),
           "squadronCode": "337",
           "squadronName": "337TRS",
         }

我将某个周组的特定活动的计数详细信息存储在 activityCountTbl 中。我正在使用 activityCountTbl 对中队Tbl 执行查找 用于获取特定周组的中队详细信息。下面的代码不起作用。

当我注释/删除 $query 代码时,它会获取所有周组的所有中队。

        $query = ["ActivityArray.weekgroupId" => new MongoDB\BSON\ObjectID("5bfbddbcbb2c5645f8001495"), "ActivityArray.funRun" => "Yes"];   

        $pipeline = array(
            [
              '$match' => $query
            ],  
            [
              '$lookup' => [
                'from' => 'activityCountTbl',
                'localField' => '_id',
                'foreignField' => 'squadronId',
                'as' => 'ActivityArray'
              ]
            ],
            ['$project' => [
                '_id' => 1.0,
                'squadronName' => 1.0,
                'ActivityArray' => 1.0
            ]],
        );

        return $this->db->squadronTbl->aggregate($pipeline)->toArray();

请帮忙!!!

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework mongodb-php php-mongodb


    【解决方案1】:
    $query = ["ActivityArray.weekgroupId" => new MongoDB\BSON\ObjectID("5bfbddbcbb2c5645f8001495"), "ActivityArray.funRun" => "Yes"]
    
    $pipeline = array(
        [
          '$match' => []
        ],  
        [
          '$lookup' => [
            'from' => 'activityCountTbl',
            'localField' => '_id',
            'foreignField' => 'squadronId',
            'as' => 'ActivityArray'
          ]
        ],
        [
          '$match' => $query 
        ],
        ['$project' => [
            '_id' => 1.0,
            'squadronName' => 1.0,
            'ActivityArray' => 1.0
        ]],
    );
    

    类似的东西

    【讨论】:

    • squadron table 不包含 weekgroup id 字段... weekgroupid 和 funrun 字段是 activityCountTbl 的字段
    • 是的,但是您正在将该聚合发送到中队Tbl 集合,因此您需要对其进行匹配或先进行查找
    • 值 "5bfbddbcbb2c5645f8001495"" 来自另一个表,即问题中未提及的周组表
    • 上述帖子永远不会获取任何数据。请尝试理解我的观点
    • 我现在明白了,所以您可能想在第一次匹配中匹配所有内容,或者只是进行查找并将原始匹配放在查找之后
    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多