Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从mongoDB的查询结果中删除`\u id`字段?_Php_Mysql_Mongodb_Laravel - Fatal编程技术网

Php 如何从mongoDB的查询结果中删除`\u id`字段?

Php 如何从mongoDB的查询结果中删除`\u id`字段?,php,mysql,mongodb,laravel,Php,Mysql,Mongodb,Laravel,我正在使用laravelmongodb()来操作mongodb数据 我想将mongodb查询到的数据传输到mysql中,有一个演示函数: TestController.php public function queryAndInsertMysql() { $articles = DB::connection('mongodb')->collection('articles')->get()->toArray(); DB::connection('mysql')

我正在使用
laravelmongodb
()来操作mongodb数据

我想将mongodb查询到的数据传输到mysql中,有一个演示函数:

TestController.php

public function queryAndInsertMysql()
{
    $articles = DB::connection('mongodb')->collection('articles')->get()->toArray();

    DB::connection('mysql')->table('articles')->insert($articles);

    dd('ok');
}
运行此函数时出错:

SQLSTATE[42S22]: Column not found: 1054 Unknown column '_id' in 'field list' (SQL: insert into `articles` (`_id`, `content`, `title`) values (59ad186437dd1f1968004334, hello..., hello), (59ad186437dd1f1968004335, foo..., foo), (59ad186437dd1f1968004336, bar..., bar))
出现此错误是因为mongodb集合中有一个
\u id
字段,
mysql表中没有
\u id
字段,
因此,在将它们插入mysql之前,我需要删除
\u id
字段

我尝试使用
array\u shift()
执行此操作,但不起作用:

public function removeId()
{
    $articles = DB::connection('mongodb')->collection('articles')->get()->toArray();

    foreach ($articles as $article) {
        array_shift($article);
    }


    dd($articles);
}
\u id
字段仍然存在:


我该怎么办?

这是一个嵌套数组,因此需要使用扩展循环

示例

<?php
$a = [
    0 => [
        '_id' => 'sdgsdg'    
    ]
];

$y = '';

foreach ($a as $key => $val) {
    $y =  array_shift($a[$key]);  
}

var_dump($y); /** ---> string(6) "sdgsdg" **/
?>

这是一个嵌套数组,因此您需要使用扩展循环

示例

<?php
$a = [
    0 => [
        '_id' => 'sdgsdg'    
    ]
];

$y = '';

foreach ($a as $key => $val) {
    $y =  array_shift($a[$key]);  
}

var_dump($y); /** ---> string(6) "sdgsdg" **/
?>

Laravel Collections地图功能可以帮助您完成以下任务:


删除_id字段,然后将其插入MySQL数据库中。Laravel Collections映射函数可以帮助您:


删除_id字段,然后将其插入MySQL数据库

您需要使用投影过滤出
\u id

public function queryAndInsertMysql()
{
    $articles = DB::connection('mongodb')
        ->collection('articles')
        ->project(['_id' => 0])
        ->get()
        ->toArray();

    DB::connection('mysql')->table('articles')->insert($articles);

    dd('ok');
}
请注意,mongodb是无Shemale的,除非您使用强制执行它,因此建议在
项目
参数中将您希望插入SQL的所有字段列为白名单:

public function queryAndInsertMysql()
{
    $articles = DB::connection('mongodb')
        ->collection('articles')
        ->project(['_id' => 0, 'content' => 1, 'title' => 1])
        ->get()
        ->toArray();

    DB::connection('mysql')->table('articles')->insert($articles);

    dd('ok');
}

它将保证即使您无意中有一个包含任何其他字段的文档,它也将被忽略。

您需要使用投影来过滤
\u id

public function queryAndInsertMysql()
{
    $articles = DB::connection('mongodb')
        ->collection('articles')
        ->project(['_id' => 0])
        ->get()
        ->toArray();

    DB::connection('mysql')->table('articles')->insert($articles);

    dd('ok');
}
请注意,mongodb是无Shemale的,除非您使用强制执行它,因此建议在
项目
参数中将您希望插入SQL的所有字段列为白名单:

public function queryAndInsertMysql()
{
    $articles = DB::connection('mongodb')
        ->collection('articles')
        ->project(['_id' => 0, 'content' => 1, 'title' => 1])
        ->get()
        ->toArray();

    DB::connection('mysql')->table('articles')->insert($articles);

    dd('ok');
}
它将保证即使您意外地有一个包含任何其他字段的文档,它也将被忽略