在Eloquent中查询时,MongoDB隐藏密钥

时间:2015-06-11 17:29:04

标签: mongodb laravel eloquent

当我使用options ? options.prefix : ''执行查询时:

whereIn

我得到的结果如下:

$data = User::whereIn('name', $sample)->select('numbers')->get();

我想知道是否可以隐藏"数字" 键,请注意,这不是投影,因为"数字" 是搜索信息的一部分。结果应如下所示:

[{"numbers":["100","101"]},{"numbers":["100","101","103"]}, ...]

允许我对数千个结果执行操作。

有办法吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以尝试使用 raw() 方法,并使用本机MongoCollection方法(如 aggregate() )对文档进行分组并推送将数值键值数组,然后用光标迭代,这样(未经测试):

$data = DB::collection('users')->raw(function($collection)
{
    $cursor = $collection->aggregate(array(
        array(
            '$match' => array('name' => $sample)
        ),
        array(
            '$unwind' => '$numbers'
        ),
        array(
            '$group' => array(
                '_id' => null,
                'numbers' => array(
                    '$push' => '$numbers'
                )
            )
        ),
        array(
            '$project' => array(
                '_id' => 0,
                'numbers' => 1
            )
        )       
    ));

    $elems = array();
    // Iterate cursor
    $current = $cursor;
    do {
        $elems[] = $current->$numbers;
    } while (!($current = $cursor->next()));

    return array_values($elems);    
});