embulk-output-mongodb_nest 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44cd8770b458a56c1302a320b7a835a474b8a066
|
4
|
+
data.tar.gz: 9164e109a20b9f1e21892787f6691bb87789a94c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fcf602b68ceaa13fdc39a502e4130b68d345d556bad626442cd68b95308a4d4977e43173e99b9087ab26c4e41c3d836b54cff36f7acd22b4d15564ba7c3de7a
|
7
|
+
data.tar.gz: b4a64273bdbe248d6cc284683ae634ae5e56a29b54fb0f8f55c665ee2afeaee95f8375c92d3c371f4a7a221dbb66215326b03aa3b6f1c9a70f17a67d39ca0d8a
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ Dumps records to Mongodb with subdocument
|
|
20
20
|
- **user**: mongodb account (string, required)
|
21
21
|
- **password**: password (string, required)
|
22
22
|
- **collection**: collection name (string, required)
|
23
|
-
- **key**: primary
|
23
|
+
- **key**: primary keys of collection (string array, required, **since v0.1.2**)
|
24
24
|
- **child**: describe subdocument (object list, default: null)
|
25
25
|
- **bulk_size**: bulk upsert size at time (integer, default: `10000`)
|
26
26
|
|
@@ -36,7 +36,7 @@ out:
|
|
36
36
|
user: your-account-name
|
37
37
|
password: your-password
|
38
38
|
collection: your-collection-name
|
39
|
-
key: your-
|
39
|
+
key: [your-key1, key2, ...]
|
40
40
|
child:
|
41
41
|
- {name: mychild, field: time}
|
42
42
|
- {name: yourchild, field: comment}
|
@@ -75,7 +75,7 @@ out:
|
|
75
75
|
user: your-account-name
|
76
76
|
password: your-password
|
77
77
|
collection: your-collection-name
|
78
|
-
key: your-key
|
78
|
+
key: [your-key, key2]
|
79
79
|
child:
|
80
80
|
- {name: mychild, field: time}
|
81
81
|
- {name: yourchild, field: comment}
|
@@ -83,4 +83,9 @@ out:
|
|
83
83
|
```
|
84
84
|
|
85
85
|
|
86
|
+
## Release
|
87
|
+
* 0.1.2 2018-06-08 The key field has been changed to a list type. The JSON Parser is supported by the input plugin.
|
88
|
+
* 0.1.1 2018-06-05 [bug fix] Fiexed an error when a child field was entered
|
89
|
+
* 0.1.0 2018-05-31 first release
|
90
|
+
|
86
91
|
|
data/build.gradle
CHANGED
@@ -28,43 +28,43 @@ public class MongodbNestOutputPlugin implements OutputPlugin
|
|
28
28
|
public interface DefineChildDocument extends Task
|
29
29
|
{
|
30
30
|
@Config("name")
|
31
|
-
|
31
|
+
String getName();
|
32
32
|
|
33
33
|
@Config("field")
|
34
|
-
|
34
|
+
String getField();
|
35
35
|
}
|
36
36
|
|
37
37
|
public interface PluginTask extends Task
|
38
38
|
{
|
39
39
|
@Config("collection")
|
40
|
-
|
40
|
+
String getCollection();
|
41
41
|
|
42
42
|
@Config("host")
|
43
|
-
|
43
|
+
String getHost();
|
44
44
|
|
45
45
|
@Config("port")
|
46
46
|
@ConfigDefault("27017")
|
47
|
-
|
47
|
+
int getPort();
|
48
48
|
|
49
49
|
@Config("database")
|
50
|
-
|
50
|
+
String getDatabase();
|
51
51
|
|
52
52
|
@Config("user")
|
53
|
-
|
53
|
+
String getUser();
|
54
54
|
|
55
55
|
@Config("password")
|
56
|
-
|
56
|
+
String getPassword();
|
57
57
|
|
58
58
|
@Config("key")
|
59
|
-
|
59
|
+
List<String> getKey();
|
60
60
|
|
61
61
|
@Config("child")
|
62
62
|
@ConfigDefault("null")
|
63
|
-
|
63
|
+
Optional<List<DefineChildDocument>> getChild();
|
64
64
|
|
65
65
|
@Config("bulk_size")
|
66
66
|
@ConfigDefault("1000")
|
67
|
-
|
67
|
+
int getBulkSize();
|
68
68
|
|
69
69
|
}
|
70
70
|
|
@@ -76,6 +76,9 @@ public class MongodbNestOutputPlugin implements OutputPlugin
|
|
76
76
|
// return resume(task.dump(), schema, taskCount, control);
|
77
77
|
|
78
78
|
// non-retryable (non-idempotent) output:
|
79
|
+
|
80
|
+
System.out.println(config.toString());
|
81
|
+
|
79
82
|
control.run(task.dump());
|
80
83
|
return Exec.newConfigDiff();
|
81
84
|
}
|
@@ -8,6 +8,7 @@ import com.mongodb.client.MongoDatabase;
|
|
8
8
|
import com.mongodb.client.model.ReplaceOneModel;
|
9
9
|
import com.mongodb.client.model.ReplaceOptions;
|
10
10
|
import com.mongodb.client.model.WriteModel;
|
11
|
+
import org.bson.BSONObject;
|
11
12
|
import org.bson.Document;
|
12
13
|
import org.embulk.config.TaskReport;
|
13
14
|
import org.embulk.spi.*;
|
@@ -17,7 +18,6 @@ import org.slf4j.Logger;
|
|
17
18
|
import java.io.UnsupportedEncodingException;
|
18
19
|
import java.net.URLEncoder;
|
19
20
|
import java.util.ArrayList;
|
20
|
-
import java.util.Date;
|
21
21
|
import java.util.List;
|
22
22
|
import java.util.Map;
|
23
23
|
|
@@ -43,6 +43,7 @@ public class PluginPageOutput implements TransactionalPageOutput
|
|
43
43
|
private MongoDatabase db;
|
44
44
|
private MongoCollection<Document> collection;
|
45
45
|
|
46
|
+
|
46
47
|
PluginPageOutput(MongodbNestOutputPlugin.PluginTask task, Schema schema)
|
47
48
|
{
|
48
49
|
this.pageReader = new PageReader(schema);
|
@@ -71,7 +72,8 @@ public class PluginPageOutput implements TransactionalPageOutput
|
|
71
72
|
this.collection = this.db.getCollection(task.getCollection());
|
72
73
|
}
|
73
74
|
|
74
|
-
@Override
|
75
|
+
@Override
|
76
|
+
public void add(Page page)
|
75
77
|
{
|
76
78
|
pageReader.setPage(page);
|
77
79
|
List<WriteModel<Document>> replaceModel = new ArrayList<>();
|
@@ -89,6 +91,10 @@ public class PluginPageOutput implements TransactionalPageOutput
|
|
89
91
|
{
|
90
92
|
doc.append(t, null);
|
91
93
|
}
|
94
|
+
else if(schema.getColumnType(i).getName().compareTo("json") == 0)
|
95
|
+
{
|
96
|
+
doc.putAll((BSONObject) BasicDBObject.parse(pageReader.getJson(i).toJson()));
|
97
|
+
}
|
92
98
|
else if (type.equals(boolean.class))
|
93
99
|
{
|
94
100
|
doc.append(t, pageReader.getBoolean(i));
|
@@ -109,6 +115,7 @@ public class PluginPageOutput implements TransactionalPageOutput
|
|
109
115
|
{
|
110
116
|
doc.append(t, new java.sql.Timestamp(pageReader.getTimestamp(i).toEpochMilli()));
|
111
117
|
}
|
118
|
+
|
112
119
|
}
|
113
120
|
|
114
121
|
if (task.getChild().isPresent())
|
@@ -117,10 +124,9 @@ public class PluginPageOutput implements TransactionalPageOutput
|
|
117
124
|
}
|
118
125
|
|
119
126
|
replaceModel.add(new ReplaceOneModel<>(
|
120
|
-
|
127
|
+
generateFilter(doc),
|
121
128
|
new Document(doc),
|
122
|
-
new ReplaceOptions().upsert(true))
|
123
|
-
);
|
129
|
+
new ReplaceOptions().upsert(true)));
|
124
130
|
|
125
131
|
if(replaceModel.size() % task.getBulkSize() == 0)
|
126
132
|
{
|
@@ -133,7 +139,18 @@ public class PluginPageOutput implements TransactionalPageOutput
|
|
133
139
|
{
|
134
140
|
collection.bulkWrite(replaceModel);
|
135
141
|
}
|
142
|
+
}
|
143
|
+
|
144
|
+
private Document generateFilter(BasicDBObject document)
|
145
|
+
{
|
146
|
+
Document filter = new Document();
|
147
|
+
|
148
|
+
for(String k : task.getKey())
|
149
|
+
{
|
150
|
+
filter.append(k, document.get(k));
|
151
|
+
}
|
136
152
|
|
153
|
+
return filter;
|
137
154
|
}
|
138
155
|
|
139
156
|
private BasicDBObject transformDocument(BasicDBObject doc)
|
@@ -158,22 +175,26 @@ public class PluginPageOutput implements TransactionalPageOutput
|
|
158
175
|
return doc;
|
159
176
|
}
|
160
177
|
|
161
|
-
@Override
|
178
|
+
@Override
|
179
|
+
public void finish()
|
162
180
|
{
|
163
181
|
|
164
182
|
}
|
165
183
|
|
166
|
-
@Override
|
184
|
+
@Override
|
185
|
+
public void close()
|
167
186
|
{
|
168
187
|
this.mongo.close();
|
169
188
|
}
|
170
189
|
|
171
|
-
@Override
|
190
|
+
@Override
|
191
|
+
public void abort()
|
172
192
|
{
|
173
193
|
|
174
194
|
}
|
175
195
|
|
176
|
-
@Override
|
196
|
+
@Override
|
197
|
+
public TaskReport commit()
|
177
198
|
{
|
178
199
|
return null;
|
179
200
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-output-mongodb_nest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- focuschange
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -60,7 +60,7 @@ files:
|
|
60
60
|
- src/main/java/org/embulk/output/mongodb_nest/PluginPageOutput.java
|
61
61
|
- src/test/java/org/embulk/output/mongodb_nest/TestMongodbNestOutputPlugin.java
|
62
62
|
- classpath/mongo-java-driver-3.7.0.jar
|
63
|
-
- classpath/embulk-output-mongodb_nest-0.1.
|
63
|
+
- classpath/embulk-output-mongodb_nest-0.1.2.jar
|
64
64
|
homepage: https://github.com/focuschange/embulk-output-mongodb_nest
|
65
65
|
licenses:
|
66
66
|
- MIT
|