如何在Yii2中编写以下mongo查询查询

时间:2016-04-30 06:03:11

标签: mongodb yii2

我在Yii2中使用此mongo extension

我有2个名为ServiceProviderParents的集合。在ServiceProvider中,有包含父母ID的子文档(PostCommentIDs)

另一个集合Parents包含所有父信息。

我想加入2个系列。我通过以下mongo查询实现了它。

但是使用上面的扩展如何在Yii2中编写这个查询。

db.ServiceProvider.aggregate([
   {
      $unwind: "$PostCommentIDs"
   },
   {
      $lookup:
         {
            from: "Parents",
            localField: "PostCommentIDs",
            foreignField: "ID",
            as: "ParentDetails"
        }
   },
   {
      $match: { "ParentDetails": { $ne: [] } }
   }
])

请帮忙。谢谢!

2 个答案:

答案 0 :(得分:1)

找到解决方案。它可能对某人有帮助。

$collection = Yii::$app->mongodb->getCollection('ServiceProvider');
$result = $collection->aggregate(
            ['$unwind' => '$PostCommentUserIDs'],
            [ 
                '$lookup' => 
                    [
                        'from' => 'Parents',
                        'localField' => 'PostCommentUserIDs',
                        'foreignField' => 'ID',
                        'as' => 'ParentDetails'
                    ] 
            ],
            [
                '$match' => [
                    'ParentDetails' => [ '$ne' => []  ]
                ]
            ]
);

答案 1 :(得分:1)

在当前说明中使用这种方式:管道必须始终位于数组中

$collection = Yii::$app->mongodb->getCollection('ServiceProvider');
$result = $collection->aggregate([
        ['$unwind' => '$PostCommentUserIDs'],
        [ 
            '$lookup' => 
                [
                    'from' => 'Parents',
                    'localField' => 'PostCommentUserIDs',
                    'foreignField' => 'ID',
                    'as' => 'ParentDetails'
                ] 
        ],
        [
            '$match' => [
                'ParentDetails' => [ '$ne' => []  ]
            ]
        ]
      ]);