У меня возникли проблемы с извлечением значений, хранящихся в Cloudant (CouchDB). Ниже приведен пример сохраненного документа.Извлечение вложенных значений из документов в Cloudant
{
"_id": "d47cd130de736894be5c464c314f1083",
"_rev": "1-2baf765d6f78bd80b4a604718063c0eb",
"Name": John,
"Surname": "Doe",
"ID": "89884600000001936983",
"Records": [
{
"SeqNo": 14776,
"Reason": 25,
"DateUTC": "2015-12-01 01:59:35",
"Fields": [
{
"HeartRate": "68",
"Weight": "75",
},
{
"Eyesight": 20,
},
{
"OtherData": {
"1": 4217,
"2": 1179,
"3": 2588,
"4": 2488,
"5": 21
},
"FType": 6
}
]
},
{
"SeqNo": 14777,
"Reason": 25,
"DateUTC": "2015-12-05 02:00:35",
"Fields": [
{
"HeartRate": "72",
"Weight": "78",
},
{
"Eyesight": 20,
},
{
"OtherData": {
"1": 4217,
"2": 1198,
"3": 2588,
"4": 2488,
"5": 21
},
"FType": 6
}
]
}
]
}
База данных содержит множество документов, и каждый документ содержит несколько записей данных, обозначенных порядковым номером. Количество записей (последовательностей) данных на одном документе может быть от 1 до бесконечности. В одном из представлений должен отображаться массив, содержащий все значения, извлеченные из всех документов, относящихся к Джону Доу. В настоящее время база данных содержит только документы, относящиеся к Джону Доу, но это изменится в будущем.
Текущий вид документа выглядит следующим образом:
function(doc) {
if(doc.Records) {
doc.Records.forEach(function(SeqNo) {
emit(SeqNo,null);
});
}
}
Это дает следующий результат для каждой записи данных (отдельный результат для каждой последовательности):
{
"id": "d47cd130de736894be5c464c314f1083",
"key": {
"SeqNo": 14776,
"Reason": 25,
"DateUTC": "2015-12-01 01:59:35",
"Fields": [
{
"HeartRate": "68",
"Weight": "75",
},
{
"Eyesight": 20,
},
{
"OtherData": {
"1": 4217,
"2": 1179,
"3": 2588,
"4": 2488,
"5": 21
},
"FType": 6
}
]
},
"value": null,
"_id": "d47cd130ce736894be5c464c314f1083"
}
Первым шагом было бы сделать убедитесь, что требуемые значения можно извлечь до построения массива.
Испустите (doc.SeqNo, нуль) не обеспечивает порядковый номер только, и не излучает (SEQNO, doc.SeqNo) Мои вопросы,
как извлечь только номер последовательности?
Как мне построить массив из результатов?
будет ли это изменяться, когда я хочу извлечь значение OtherData.1?
Любая помощь будет принята с благодарностью.
Спасибо. Это работает! Любая идея, как извлечь вложенные значения? Например, OtherData.1? Record.Fields.OtherData.1 не работает. Запрос, вероятно, ограничен двумя полями, такими как Record.Fields и не более. –
Используя emit (Record.SeqNo, Record.Fields [2] .OtherData ["1"]); извлекается правильное значение. –