字段 [_id] 是元数据字段,不能添加到文档中。使用索引 API 请求参数

Posted

技术标签:

【中文标题】字段 [_id] 是元数据字段,不能添加到文档中。使用索引 API 请求参数【英文标题】:Field [_id] is a metadata field and cannot be added inside a document. Use the index API request parameters 【发布时间】:2019-10-05 21:58:53 【问题描述】:

我尝试了批量添加,如图所示是你的自述文件,但我收到了这个错误:

"Field [_id] is a metadata field and cannot be added inside a document. Use the index API request parameters" 

我要添加的模型只是一个测试模型,类似于:

"_id" => "57028f25633db3473d0041c8" 

数据来自 Mongo 数据库实例

我正在使用 Windown 10、phpstorm、xampp、Laravel 5.5、jenssegers/mongodb、elasticquent/elasticquent 1.0、Elasticsearch 6.0.0,

我的代码:

\App\Product::createIndex($shards = null, $replicas = null);
\App\Product::putMapping($ignoreConflicts = true);
\App\Product::addAllToIndex();

【问题讨论】:

_id 是 elasticsearch 的内部保留字段。如果您的文档尝试更改布局或尽可能省略 _id 字段。 我无法删除数据中的 _id,因为它是必需的。 “如果您的文件更改布局”我不明白...请帮助我 在您的弹性搜索模型中引入一个新字段,如 internal_id 并使用 mongos _id 填充它。 请看elasticseaech官方文档:elastic.co/guide/en/elasticsearch/client/php-api/5.0/index.html 嘿,我正在使用 logstash 将数据传递给弹性搜索。我已经通过在 logstash 配置文件中放入 filter->mutate 并将 _id 分配给其他字段来解决这个问题。重命名 => ["mongo_id", "_id"]。 【参考方案1】:

当我通过 terraform 将 cloudwatch 日志重定向到 ElasticSearch 时,我遇到了同样的问题。通过为 cloudwatch 订阅过滤器添加 filter_pattern 解决了这个问题(在它为空之前)。

resource "aws_cloudwatch_log_subscription_filter" "cloudwatch_logs_to_es" 
  depends_on = [aws_lambda_permission.cloudwatch_allow]
  name            = var.clw_subscription_filter_name
  log_group_name  = aws_cloudwatch_log_group.auth0_log_group.name
  filter_pattern  = "[host, ident, authuser, date, request, status, bytes]"
  destination_arn = aws_lambda_function.cwl_stream_lambda.arn

【讨论】:

以上是关于字段 [_id] 是元数据字段,不能添加到文档中。使用索引 API 请求参数的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 没有则插入,有则更新其中某列

有没有办法在 couchdb 现有文档中添加新字段/值

在猫鼬中更新它们时如何访问每个文档字段[重复]

Mongodb:通过“_id”字段搜索嵌入文档

如何将子文档中的字段更改为 Mongoose 中的父字段

基于键合并两个数组并使用 mongodb 聚合添加新字段