MongoDB client: exception inserting document containing json schema object

525 views
Skip to first unread message

Hoobajoob

unread,
Dec 1, 2015, 9:54:50 PM12/1/15
to vert.x
I'm trying out the MongoDB client with a simple insert request with this JsonObject:

{

 
"namespace" : "some.namespace",
 
"name" : "some.name",
 
"version" : "1.0.0",
 
"schema" : {
   
"$schema" : "http://json-schema.org/draft-04/schema#",
   
"type" : "object"
 
}
}


...and I get the exception below. Is it really not possible to insert a document containing a field with a leading $ character, or is this a MongoClient defect?

java.lang.IllegalArgumentException: Invalid BSON field name $schema
 at org
.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:494) ~[bson-3.0.4.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec.lambda$writeDocument$1(AbstractJsonCodec.java:257) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec$$Lambda$74/1868429581.accept(Unknown Source) ~[na:na]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec.lambda$forEach$3(JsonObjectCodec.java:110) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec$$Lambda$75/1597039948.accept(Unknown Source) ~[na:na]
 at java
.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_51]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec.forEach(JsonObjectCodec.java:109) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec.forEach(JsonObjectCodec.java:23) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec.writeDocument(AbstractJsonCodec.java:255) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec.writeValue(AbstractJsonCodec.java:102) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec.lambda$writeDocument$1(AbstractJsonCodec.java:258) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec$$Lambda$74/1868429581.accept(Unknown Source) ~[na:na]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec.lambda$forEach$3(JsonObjectCodec.java:110) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec$$Lambda$75/1597039948.accept(Unknown Source) ~[na:na]
 at java
.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_51]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec.forEach(JsonObjectCodec.java:109) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.JsonObjectCodec.forEach(JsonObjectCodec.java:23) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec.writeDocument(AbstractJsonCodec.java:255) ~[vertx-mongo-client-3.1.0.jar:na]
 at io
.vertx.ext.mongo.impl.codec.json.AbstractJsonCodec.encode(AbstractJsonCodec.java:28) ~[vertx-mongo-client-3.1.0.jar:na]
 at org
.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63) ~[bson-3.0.4.jar:na]
 at org
.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29) ~[bson-3.0.4.jar:na]
 at com
.mongodb.connection.InsertCommandMessage.writeTheWrites(InsertCommandMessage.java:99) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InsertCommandMessage.writeTheWrites(InsertCommandMessage.java:43) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.BaseWriteCommandMessage.encodeMessageBody(BaseWriteCommandMessage.java:112) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.BaseWriteCommandMessage.encodeMessageBody(BaseWriteCommandMessage.java:35) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.RequestMessage.encode(RequestMessage.java:132) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.BaseWriteCommandMessage.encode(BaseWriteCommandMessage.java:89) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.WriteCommandProtocol.executeBatchesAsync(WriteCommandProtocol.java:111) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.WriteCommandProtocol.executeAsync(WriteCommandProtocol.java:99) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InsertCommandProtocol.executeAsync(InsertCommandProtocol.java:79) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.executeAsync(DefaultServer.java:165) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.DefaultServerConnection.executeProtocolAsync(DefaultServerConnection.java:225) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.DefaultServerConnection.insertCommandAsync(DefaultServerConnection.java:114) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.MixedBulkWriteOperation$Run$5.executeWriteCommandProtocolAsync(MixedBulkWriteOperation.java:482) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.MixedBulkWriteOperation$Run$AsyncRunExecutor.executeAsync(MixedBulkWriteOperation.java:652) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.MixedBulkWriteOperation$Run.executeAsync(MixedBulkWriteOperation.java:377) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.MixedBulkWriteOperation.executeRunsAsync(MixedBulkWriteOperation.java:187) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.MixedBulkWriteOperation.access$400(MixedBulkWriteOperation.java:72) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.MixedBulkWriteOperation$2.call(MixedBulkWriteOperation.java:174) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.OperationHelper$1.onResult(OperationHelper.java:236) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.operation.OperationHelper$1.onResult(OperationHelper.java:229) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.DefaultServer$1.onResult(DefaultServer.java:88) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.DefaultServer$1.onResult(DefaultServer.java:79) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:53) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.DefaultConnectionPool$2.onResult(DefaultConnectionPool.java:198) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.DefaultConnectionPool$2.onResult(DefaultConnectionPool.java:183) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.UsageTrackingInternalConnection$1.onResult(UsageTrackingInternalConnection.java:62) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.UsageTrackingInternalConnection$1.onResult(UsageTrackingInternalConnection.java:54) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$1$1.onResult(InternalStreamConnection.java:155) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$1$1.onResult(InternalStreamConnection.java:142) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnectionInitializer$3.onResult(InternalStreamConnectionInitializer.java:146) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnectionInitializer$3.onResult(InternalStreamConnectionInitializer.java:140) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.CommandHelper$1$1.onResult(CommandHelper.java:53) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.CommandHelper$1$1.onResult(CommandHelper.java:43) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.CommandHelper$3.onResult(CommandHelper.java:155) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.CommandHelper$3.onResult(CommandHelper.java:148) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection.executeCallbackAndReceiveResponse(InternalStreamConnection.java:375) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection.access$1700(InternalStreamConnection.java:65) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$ResponseBuffersCallback.onResult(InternalStreamConnection.java:417) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$ResponseBuffersCallback.onResult(InternalStreamConnection.java:386) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$ResponseHeaderCallback.onSuccess(InternalStreamConnection.java:555) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$ResponseHeaderCallback.access$2200(InternalStreamConnection.java:514) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$ResponseHeaderCallback$ResponseBodyCallback.onResult(InternalStreamConnection.java:577) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$ResponseHeaderCallback$ResponseBodyCallback.onResult(InternalStreamConnection.java:561) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$3.completed(InternalStreamConnection.java:444) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.InternalStreamConnection$3.completed(InternalStreamConnection.java:441) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.AsynchronousSocketChannelStream$BasicCompletionHandler.completed(AsynchronousSocketChannelStream.java:221) ~[mongodb-driver-core-3.0.4.jar:na]
 at com
.mongodb.connection.AsynchronousSocketChannelStream$BasicCompletionHandler.completed(AsynchronousSocketChannelStream.java:205) ~[mongodb-driver-core-3.0.4.jar:na]
 at sun
.nio.ch.Invoker.invokeUnchecked(Invoker.java:126) ~[na:1.8.0_51]
 at sun
.nio.ch.Invoker.invokeUnchecked(Invoker.java:281) ~[na:1.8.0_51]
 at sun
.nio.ch.WindowsAsynchronousSocketChannelImpl$ReadTask.completed(WindowsAsynchronousSocketChannelImpl.java:579) ~[na:1.8.0_51]
 at sun
.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:397) ~[na:1.8.0_51]
 at sun
.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[na:1.8.0_51]
 at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_51]
 at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_51]
 at java
.lang.Thread.run(Thread.java:745) [na:1.8.0_51]



David Bush

unread,
Dec 1, 2015, 11:27:22 PM12/1/15
to vert.x
Mongo doesn't allow a $ to be the first character of the field name. It's reserved for Mongo directives.

I stored JSON schema before by creating a filter to change $schema to s$chema on the way in and out of mongo. It's a small pain but it works.

Chef Hoobajoob

unread,
Dec 2, 2015, 12:17:00 AM12/2/15
to ve...@googlegroups.com
Ah drat. Ok - I'll work around it. Thanks for the confirmation and suggestion!

On Tue, Dec 1, 2015 at 9:27 PM David Bush <dbu...@gmail.com> wrote:
Mongo doesn't allow a $ to be the first character of the field name. It's reserved for Mongo directives.

I stored JSON schema before by creating a filter to change $schema to s$chema on the way in and out of mongo. It's a small pain but it works.

--
You received this message because you are subscribed to a topic in the Google Groups "vert.x" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/vertx/DTcbeYvpQ3A/unsubscribe.
To unsubscribe from this group and all its topics, send an email to vertx+un...@googlegroups.com.
Visit this group at http://groups.google.com/group/vertx.
To view this discussion on the web, visit https://groups.google.com/d/msgid/vertx/d1649763-d745-4913-8f5d-22a471a26cc1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages