I have written the code to CRUD the data (JSON) on MarkLogic using the "Java Client API".
CRUD
Basic CRUD.
Create a new document. Let MarkLogic handle the generation of the document URI.
create
public class CreateApp {
public static void main(String[] args) {
CreateApp app = new CreateApp();
app.execute(args);
}
private void execute(String[] args) {
DatabaseClient client = createDatabaseClient();
Transaction tran = client.openTransaction();
try {
String json = ""
+ "{"
+ " \"aaa\" : \"AAA\","
+ " \"bbb\" : \"BBB\","
+ " \"ccc\" : 111,"
+ " \"ddd\" : ["
+ " {"
+ " \"ddd-1\" : \"DDD-1\","
+ " \"ddd-2\" : 11"
+ " },"
+ " {"
+ " \"ddd-1\" : \"DDD-2\","
+ " \"ddd-2\" : 22"
+ " }"
+ " ]"
+ "}";
create(client, json, tran);
tran.commit();
} catch (Exception ex) {
tran.rollback();
ex.printStackTrace();
} finally {
client.release();
}
}
private String create(DatabaseClient client, String jsonData, Transaction tran) {
JSONDocumentManager docMgr = client.newJSONDocumentManager();
//Specify extension
DocumentUriTemplate uriTemplate = docMgr.newDocumentUriTemplate("json");
//Specify directory
uriTemplate.setDirectory("/xxx/yyy/");
DocumentDescriptor desc = docMgr.create(uriTemplate, new StringHandle(jsonData), tran);
//Return document URI to caller
return desc.getUri();
}
private DatabaseClient createDatabaseClient() {
DatabaseClient client =
DatabaseClientFactory.newClient(
"xxx", 111, "xxx",
new DigestAuthContext("xxx", "xxx"));
return client;
}
}
A QBE search identifies the URI and loads the document.
read
public class ReadApp {
public static void main(String[] args) {
ReadApp app = new ReadApp();
app.execute(args);
}
private void execute(String[] args) {
DatabaseClient client = createDatabaseClient();
try {
String query = ""
+ "{"
+ " \"$query\" : {"
+ " \"aaa\" : \"AAA\","
+ " \"bbb\" : \"BBB\","
+ " \"$filtered\" : false"
+ " }"
+ "}";
List<String> jsonList = search(client, "/xxx/yyy/", query, null);
if (jsonList.isEmpty()) {
return;
}
String uri = jsonList.get(0);
String json = read(client, uri, null);
System.out.println("____ uri :" + uri);
System.out.println("____ json :" + json);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
client.release();
}
}
private List<String> search(DatabaseClient client, String dir, String query, Transaction tran) {
QueryManager queryMgr = client.newQueryManager();
queryMgr.setPageLength(100); //Default 10
StringHandle strHandle = new StringHandle(query).withFormat(Format.JSON);
RawQueryByExampleDefinition querydef = queryMgr.newRawQueryByExampleDefinition(strHandle);
querydef.setDirectory(dir);
SearchHandle searchHandle = queryMgr.search(querydef, new SearchHandle(), 1, tran, null);
List<String> uriList = new ArrayList<String>();
MatchDocumentSummary[] results = searchHandle.getMatchResults();
for (MatchDocumentSummary summary : results) {
uriList.add(summary.getUri());
}
return uriList;
}
private String read(DatabaseClient client, String uri, Transaction tran) {
JSONDocumentManager docMgr = client.newJSONDocumentManager();
String jsonData = docMgr.read(uri, new StringHandle(), tran).get();
return jsonData;
}
private DatabaseClient createDatabaseClient() {
//abridgement
}
}
The QBE search identifies the URI and updates (overwrites) the document.
update
public class UpdateApp {
public static void main(String[] args) {
UpdateApp app = new UpdateApp();
app.execute(args);
}
private void execute(String[] args) {
DatabaseClient client = createDatabaseClient();
Transaction tran = client.openTransaction();
try {
String query = ""
+ "{"
+ " \"$query\" : {"
+ " \"aaa\" : \"AAA\","
+ " \"bbb\" : \"BBB\","
+ " \"$filtered\" : false"
+ " }"
+ "}";
String json = ""
+ "{"
+ " \"aaa\" : \"AAAAAA\","
+ " \"bbb\" : \"BBBBBB\","
+ " \"ccc\" : 111111,"
+ " \"ddd\" : ["
+ " {"
+ " \"ddd-1\" : \"DDDDDD-1\","
+ " \"ddd-2\" : 1111"
+ " },"
+ " {"
+ " \"ddd-1\" : \"DDDDDD-2\","
+ " \"ddd-2\" : 2222"
+ " }"
+ " ]"
+ "}";
List<String> jsonList = search(client, "/xxx/yyy/", query, null);
if (jsonList.isEmpty()) {
return;
}
String uri = jsonList.get(0);
update(client, uri, json, tran);
tran.commit();
} catch (Exception ex) {
tran.rollback();
ex.printStackTrace();
} finally {
client.release();
}
}
private List<String> search(DatabaseClient client, String dir, String query, Transaction tran) {
//abridgement
}
private void update(DatabaseClient client, String uri, String jsonData, Transaction tran) {
JSONDocumentManager docMgr = client.newJSONDocumentManager();
StringHandle strHandle = new StringHandle().with(jsonData);
docMgr.write(uri, strHandle, tran);
}
private DatabaseClient createDatabaseClient() {
//abridgement
}
}
A QBE search identifies the URI and deletes the document.
delete
public class DeleteApp {
public static void main(String[] args) {
DeleteApp app = new DeleteApp();
app.execute(args);
}
private void execute(String[] args) {
DatabaseClient client = createDatabaseClient();
Transaction tran = client.openTransaction();
try {
String query = ""
+ "{"
+ " \"$query\" : {"
+ " \"aaa\" : \"AAA\","
+ " \"bbb\" : \"BBB\","
+ " \"$filtered\" : false"
+ " }"
+ "}";
List<String> jsonList = search(client, "/xxx/yyy/", query, null);
if (jsonList.isEmpty()) {
return;
}
String uri = jsonList.get(0);
delete(client, uri, tran);
tran.commit();
} catch (Exception ex) {
tran.rollback();
ex.printStackTrace();
} finally {
client.release();
}
}
private List<String> search(DatabaseClient client, String dir, String query, Transaction tran) {
//abridgement
}
private void delete(DatabaseClient client, String uri, Transaction tran) {
JSONDocumentManager docMgr = client.newJSONDocumentManager();
docMgr.delete(uri, tran);
}
private DatabaseClient createDatabaseClient() {
//abridgement
}
}
+α
Update only part of the document.
Specify the path in the document to update the value.
Value update
public class PatchApp1 {
public static void main(String[] args) {
PatchApp1 app = new PatchApp1();
app.execute(args);
}
private void execute(String[] args) {
DatabaseClient client = createDatabaseClient();
Transaction tran = client.openTransaction();
try {
String uri = "/xxx/yyy/zzz.json";
patch(client, uri, "$.bbb", "XXXXXX", tran);
tran.commit();
} catch (Exception ex) {
tran.rollback();
ex.printStackTrace();
} finally {
client.release();
}
}
private void patch(DatabaseClient client, String uri, String path, String value, Transaction tran) {
JSONDocumentManager jsonMgr = client.newJSONDocumentManager();
DocumentPatchBuilder patchBuilder = jsonMgr.newPatchBuilder().pathLanguage(PathLanguage.JSONPATH);
patchBuilder.replaceValue(path, value);
PatchHandle patchHandle = patchBuilder.build();
jsonMgr.patch(uri, patchHandle, tran);
}
private DatabaseClient createDatabaseClient() {
//abridgement
}
}
Add an element to the end of the array element.
Add to array element
public class PatchApp2 {
public static void main(String[] args) {
PatchApp2 app = new PatchApp2();
app.execute(args);
}
private void execute(String[] args) {
DatabaseClient client = createDatabaseClient();
Transaction tran = client.openTransaction();
try {
String uri = "/xxx/yyy/zzz.json";
String fragment = ""
+ "{"
+ " \"ddd-1\" : \"DDD-3\","
+ " \"ddd-2\" : 33"
+ "}";
patch(client, uri, "$.[\"ddd\"]", fragment, tran);
tran.commit();
} catch (Exception ex) {
tran.rollback();
ex.printStackTrace();
} finally {
client.release();
}
}
private void patch(DatabaseClient client, String uri, String fragmentPath, String fragmentData, Transaction tran) {
JSONDocumentManager jsonMgr = client.newJSONDocumentManager();
DocumentPatchBuilder patchBuilder = jsonMgr.newPatchBuilder().pathLanguage(PathLanguage.JSONPATH);
patchBuilder.insertFragment(fragmentPath, Position.LAST_CHILD, fragmentData);
PatchHandle patchHandle = patchBuilder.build();
jsonMgr.patch(uri, patchHandle, tran);
}
private DatabaseClient createDatabaseClient() {
//abridgement
}
}
Replaces the contents of the array elements completely.
Replace array elements
public class PatchApp3 {
public static void main(String[] args) {
PatchApp3 app = new PatchApp3();
app.execute(args);
}
private void execute(String[] args) {
DatabaseClient client = createDatabaseClient();
Transaction tran = client.openTransaction();
try {
String uri = "/xxx/yyy/zzz.json";
String fragment = ""
+ "[{"
+ " \"ddd-1\" : \"DDD-1\","
+ " \"ddd-2\" : 11"
+ "}]";
patch(client, uri, "$.[\"ddd\"]", fragment, tran);
tran.commit();
} catch (Exception ex) {
tran.rollback();
ex.printStackTrace();
} finally {
client.release();
}
}
private void patch(DatabaseClient client, String uri, String path, String value, Transaction tran) {
JSONDocumentManager jsonMgr = client.newJSONDocumentManager();
DocumentPatchBuilder patchBuilder = jsonMgr.newPatchBuilder().pathLanguage(PathLanguage.JSONPATH);
patchBuilder.replaceFragment(path, value);
PatchHandle patchHandle = patchBuilder.build();
jsonMgr.patch(uri, patchHandle, tran);
}
private DatabaseClient createDatabaseClient() {
//abridgement
}
}
that's all
Recommended Posts