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');
}
它将保证即使您意外地有一个包含任何其他字段的文档,它也将被忽略