mirror of https://github.com/apache/nifi.git
NIFI-6554 fix oid parsing for PutMongo processor
This closes #3650 Signed-off-by: Mike Thomsen <mthomsen@apache.org>
This commit is contained in:
parent
5f696482b0
commit
9c8f40415e
|
@ -255,8 +255,14 @@ public class PutMongo extends AbstractMongoProcessor {
|
||||||
|
|
||||||
private Document parseUpdateKey(String updateKey, Map doc) {
|
private Document parseUpdateKey(String updateKey, Map doc) {
|
||||||
Document retVal;
|
Document retVal;
|
||||||
if (updateKey.equals("_id") && ObjectId.isValid(((String) doc.get(updateKey)))) {
|
if (updateKey.equals("_id")) {
|
||||||
retVal = new Document("_id", new ObjectId((String) doc.get(updateKey)));
|
if (doc.get("_id") instanceof ObjectId) {
|
||||||
|
retVal = new Document("_id", doc.get("_id"));
|
||||||
|
} else if (ObjectId.isValid((String) doc.get("_id"))){
|
||||||
|
retVal = new Document("_id", new ObjectId((String) doc.get("_id")));
|
||||||
|
} else {
|
||||||
|
retVal = new Document("_id", doc.get("_id"));
|
||||||
|
}
|
||||||
} else if (updateKey.contains(",")) {
|
} else if (updateKey.contains(",")) {
|
||||||
String[] parts = updateKey.split(",[\\s]*");
|
String[] parts = updateKey.split(",[\\s]*");
|
||||||
retVal = new Document();
|
retVal = new Document();
|
||||||
|
|
|
@ -32,6 +32,8 @@ public class MongoWriteTestBase {
|
||||||
protected static final String COLLECTION_NAME = "test";
|
protected static final String COLLECTION_NAME = "test";
|
||||||
protected String DATABASE_NAME;
|
protected String DATABASE_NAME;
|
||||||
|
|
||||||
|
protected static Document oidDocument = Document.parse("{\"_id\": {\"$oid\": \"5cd1a7376264b959a71588c1\"}}");
|
||||||
|
|
||||||
protected static final List<Document> DOCUMENTS = Arrays.asList(
|
protected static final List<Document> DOCUMENTS = Arrays.asList(
|
||||||
new Document("_id", "doc_1").append("a", 1).append("b", 2).append("c", 3),
|
new Document("_id", "doc_1").append("a", 1).append("b", 2).append("c", 3),
|
||||||
new Document("_id", "doc_2").append("a", 1).append("b", 2).append("c", 4),
|
new Document("_id", "doc_2").append("a", 1).append("b", 2).append("c", 4),
|
||||||
|
|
|
@ -391,6 +391,26 @@ public class PutMongoIT extends MongoWriteTestBase {
|
||||||
assertEquals(doc, collection.find().first());
|
assertEquals(doc, collection.find().first());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpsertWithOid() throws Exception {
|
||||||
|
TestRunner runner = init(PutMongo.class);
|
||||||
|
runner.setProperty(PutMongo.UPDATE_QUERY_KEY, "_id");
|
||||||
|
byte[] bytes = documentToByteArray(oidDocument);
|
||||||
|
|
||||||
|
runner.setProperty(PutMongo.MODE, "update");
|
||||||
|
runner.setProperty(PutMongo.UPSERT, "true");
|
||||||
|
runner.enqueue(bytes);
|
||||||
|
runner.run();
|
||||||
|
|
||||||
|
runner.assertAllFlowFilesTransferred(PutMongo.REL_SUCCESS, 1);
|
||||||
|
MockFlowFile out = runner.getFlowFilesForRelationship(PutMongo.REL_SUCCESS).get(0);
|
||||||
|
out.assertContentEquals(bytes);
|
||||||
|
|
||||||
|
// verify 1 doc inserted into the collection
|
||||||
|
assertEquals(1, collection.count());
|
||||||
|
assertEquals(oidDocument, collection.find().first());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdate() throws Exception {
|
public void testUpdate() throws Exception {
|
||||||
TestRunner runner = init(PutMongo.class);
|
TestRunner runner = init(PutMongo.class);
|
||||||
|
|
Loading…
Reference in New Issue