Po uruchomieniu SELECT * FROM projects ORDER BY createdAt desc to zapytanie w wyniku efektu interfejsu użytkownika interfejsu użytkownika Couchbase zamówione przez tak, jak powinno być, ale nie w Javie.

Kod Java.

@Override
    public List<Project> getAllProjects(String requestedOrder, Integer page, Integer pageOffset) {
        String statement = "SELECT projects.* FROM projects ORDER BY $requestedOrder DESC OFFSET $offset LIMIT $pageOffset";
        QueryOptions queryOptions = queryOptions().parameters(
                JsonObject.create().put("offset", (page - 1) * pageOffset)
                        .put("pageOffset", pageOffset)
                        .put("requestedOrder", requestedOrder));
        QueryResult queryResult = couchbaseCluster.query(statement, queryOptions);
        return queryResult.rowsAs(Project.class);
    }

Wynik UI Internet

[
  {
    "projects": {
      "createdAt": 1603804921950,
      "name": "Third Project",
      ...
    }
  },
  {
    "projects": {
      "createdAt": 1603804915827,
      "name": "Second Project",
      ...
    }
  },
  {
    "projects": {
      "createdAt": 1603804909410,
      "name": "First Project"
      ...
    }
  }
]

Wynik Java SDK.

[
  {
    "name": "Second Project",
    "createdAt": "2020-10-27T13:21:55.827+00:00",
    ...
  },
  {
    "name": "Third Project",
    "createdAt": "2020-10-27T13:22:01.950+00:00",
    ...
  },
  {
    "name": "First Project",
    "createdAt": "2020-10-27T13:21:49.410+00:00",
    ...
  }
]

Kiedy zmieniam swoje oświadczenie do tego, ale dlaczego nie zamawianie poprawnie za pomocą metody put.

String statement = "SELECT projects.* FROM projects ORDER BY " + requestedOrder + " DESC OFFSET $offset LIMIT $pageOffset";
3
Berke Sönmez 27 październik 2020, 16:37

1 odpowiedź

Najlepsza odpowiedź
String statement = "SELECT projects.* FROM projects ORDER BY $requestedOrder DESC OFFSET $offset LIMIT $pageOffset";

W powyższym zapytaniu przechodzisz zamówienie przez wyrażenia jako nazwany parametr, który jest wartością. Wartość będzie stała i sama dla wszystkich dokumentów w zapytaniu. Sortuj w tej samej wartości to Noop I.e. Nie może nic takiego sortować.

Zamówienie według wyrażeń musi zależeć od dziedziny dokumentów. Za każdym razem, gdy potrzebujesz innego pola, musisz użyć różnych zapytań.

Uwaga: JSON jest schematem mniej i brak fizycznej pozycji pola. Numer zamówienia będzie traktować jako stały VS niektóre bazy danych RDBS wykorzystuje pozycję pola projekcyjnego jako rodzaju.

Jeśli $ prośbą nie jest przedmiotem zagnieżdżonym, spróbuj zastąpić ciąg zapytania z poniższą. $ prośbaork musi oceniać łańcuch i musi być dziedziny dokumentu (nie zagnieżdżone). PRZYKŁAD $ ŻYJNOŚĆ = "Uwczęta" Podczas wykonywania sortowania oceniają p.Createdat (tj tak samo jak zamówienie przez p.createdat)

 String statement = "SELECT p.* FROM projects AS p ORDER BY p.[$requestedOrder] DESC OFFSET $offset LIMIT $pageOffset";
5
Berke Sönmez 28 październik 2020, 08:06