У меня есть следующий ванильный код Node.js:
const lst = vals.map(v => {
return [{index: {}}, {value: v}];
});
const flt = flattenDeep([lst]);
req.post('/foo/_bulk', {}, flt, (err, v) => {
log.info(err,v);
});
Я получаю эту ошибку:
Текущий токен (START_OBJECT) не логического типа
подробно:
app:es ERROR { errors: true, items: [
{
index: {
_id: '4Z6ZS20Bd2MYc8MzjK-O',
_index: 'foo',
_type: '_doc',
error: {
caused_by: {
reason: 'Current token (START_OBJECT) not of boolean type\n' +
' at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@4c9fb11; line: 1, column: 11]',
type: 'i_o_exception'
},
reason: "failed to parse field [value] of type [boolean] in document with id '4Z6ZS20Bd2MYc8MzjK-O'. Preview of field's value: '{date=unknown, @bunion=true, level=WARN, appName=unknown, @version=-1, host=unknown, pid=-1, _id=5d83fe5878bbe129e1cf9444, fields=null, value=foo}'",
type: 'mapper_parsing_exception'
},
status: 400
}
} ], took: 5 }
Кто-нибудь знает, почему ему не нравится мой массив?Массив lst
имеет только один элемент:
[{index:{},{value:'foo'}]
, с чем это может вызвать проблемы?
Если я изменю его на:
const lst = vals.map(v => {
return [{index: true}, {value: v}];
});
, тогда явместо этого получите эту ошибку:
Неправильная строка действия / метаданных [1], ожидаемый START_OBJECT или END_OBJECT, но найденный [VALUE_BOOLEAN]
объект flt выглядит следующим образом:
flt: [
{
index: {}
},
{
value: {
'@bunion': true,
'@version': -1,
_id: 5d84039dc98ff82d30337e6c,
appName: 'unknown',
date: 'unknown',
fields: null,
host: 'unknown',
level: 'WARN',
pid: -1,
value: 'foo'
}
}
]
и затем я записываю массив в запрос следующим образом:
for (const v of flt) {
req.write(JSON.stringify(v));
req.write('\n');
}
хорошо, так что, когда я делаю это, это работает:
const lst = vals.map(v => {
return [{index: {}}, {value: true}]; // value is boolean now!
});
но почему ??