MongoDB查询$ lookup和前缀

时间:2018-08-21 06:18:29

标签: mongodb mongodb-query

我有两个收藏集roundssummaries

rounds中的记录看起来像

{
   "_id": "2018-04",
   "name": "Round 2018-04" 
}

summaries中的记录如下

{
   "phase": "round:2018-04",
   "userId": NumberLong(66325),
}

我想查询summaries并基于rounds的{​​{1}}到phase的{​​{1}}中的summaries联接

问题:如果阶段中没有_id的前缀,这将非常简单。

反正有这样做吗?

到目前为止,这是我的代码。

rounds

MongoDB 3.4.16版

1 个答案:

答案 0 :(得分:1)

您可以使用substrBytes从字符串中删除字符。

$cursor = $this->mongo->selectCollection('summaries')->aggregate([
    array('$match' => []),
    array('$addFields' => [ 'phase' => [ '$substrBytes' => [ '$phase', 6, 7 ] ] ] ),
    array(
        '$lookup' => [
            'from' => 'rounds',
            'localField' => 'phase',
            'foreignField' => '_id',
            'as' => 'roundDetail'
        ]
    ),
    array(
        '$unwind' => '$roundDetail',
    ),
    array(
        '$project' => [
            'userId' => 1,
            'roundDetail.name' => 1
        ]
    )

])