### Elasticsearch Version

main

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

21.6.0 Darwin Kernel Version 21.6.0: Thu Jul  6 22:18:26 PDT 2023; root:xnu-8020.240.18.702.13~1/RELEASE_X86_64 x86_64

### Problem Description

fields option is not returning values with an array of objects. See example in "Steps to Reproduce". Problem brought up in Kibana SDH https://github.com/elastic/sdh-kibana/issues/4114

### Steps to Reproduce

```
PUT test
{}

PUT test/_mapping
{
  "properties": {
    "results": {
      "properties": {
        "value": {
          "type": "geo_point"
        }
      }
    }
  }
}

PUT test/_doc/1
{
  "results": [
    {
      "value": [
        {
          "lat": 0,
          "lon": 0
        }
      ]
    }
  ]
}


POST /test*/_search
{
  "_source": false,
  "fields": [
    "results.value"
  ]
}
```

In the response, notice how fields is not populated and no value is returned

```
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test",
        "_id": "1",
        "_score": 1
      }
    ]
  }
}
```

I would expect to get a response like 
```
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test",
        "_id": "1",
        "_score": 1,
        "fields": {
          "results.value": [
            {
              "coordinates": [
                0,
                0
              ],
              "type": "Point"
            }
          ]
        }
      }
    ]
  }
}
```

### Logs (if relevant)

_No response_
server/src/test/java/org/elasticsearch/common/xcontent/support/XContentMapValuesTests.java
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.elasticsearch.common.xcontent.XContentHelper.convertToMap;
import static org.elasticsearch.common.xcontent.XContentHelper.toXContent;
import static org.elasticsearch.test.MapMatcher.assertMap;
import static org.elasticsearch.test.MapMatcher.matchesMap;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasKey;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.IsEqual.equalTo;
public class XContentMapValuesTests extends AbstractFilteringTestCase {
    @Override
    protected void testFilter(Builder expected, Builder actual, Collection<String> includes, Collection<String> excludes)
        throws IOException {
        final XContentType xContentType = randomFrom(XContentType.values());
        final boolean humanReadable = randomBoolean();
        String[] sourceIncludes;
        if (includes == null) {
            sourceIncludes = randomBoolean() ? Strings.EMPTY_ARRAY : null;
        } else {
            sourceIncludes = includes.toArray(String[]::new);
        }
        String[] sourceExcludes;
        if (excludes == null) {
            sourceExcludes = randomBoolean() ? Strings.EMPTY_ARRAY : null;