Hi there!
Using a standalone instance of MongoDB 4.4.1 Community and the Java driver (org.mongodb:mongodb-driver-sync:4.1.1
), when I execute the following operation:
final List<Bson> updates = new ArrayList<>();
updates.add(Updates.set("projectId", "p1"));
updates.add(Updates.set("userId", "u1"));
updates.add(Updates.set("visitorId", "v1"));
updates.add(Updates.currentTimestamp("lastSeenTime"));
final Document updatedDocument =
this.visitorsCollection.findOneAndUpdate(
and(eq("projectId", visitor.getProjectId()),
or(eq("userId", visitor.getUserId()), eq("visitorId", visitor.getVisitorId()))),
updates,
new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER).upsert(true));
I am getting the following error:
Exception in thread “main” com.mongodb.MongoCommandException: Command failed with error 40324 (Location40324): ‘Unrecognized pipeline stage name: ‘$currentDate’’ on server 35.238.203.251:53254. The full response is {“ok”: 0.0, “errmsg”: “Unrecognized pipeline stage name: ‘$currentDate’”, “code”: 40324, “codeName”: “Location40324”}
at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175)
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:359)
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:280)
at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:100)
at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:490)
at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:71)
at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:255)
at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:202)
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:118)
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:110)
at com.mongodb.internal.operation.CommandOperationHelper$13.call(CommandOperationHelper.java:712)
at com.mongodb.internal.operation.OperationHelper.withReleasableConnection(OperationHelper.java:620)
at com.mongodb.internal.operation.CommandOperationHelper.executeRetryableCommand(CommandOperationHelper.java:705)
at com.mongodb.internal.operation.CommandOperationHelper.executeRetryableCommand(CommandOperationHelper.java:697)
at com.mongodb.internal.operation.BaseFindAndModifyOperation.execute(BaseFindAndModifyOperation.java:69)
at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:195)
at com.mongodb.client.internal.MongoCollectionImpl.executeFindOneAndUpdate(MongoCollectionImpl.java:785)
at com.mongodb.client.internal.MongoCollectionImpl.findOneAndUpdate(MongoCollectionImpl.java:765)
The error is caused by the use of Updates.currentTimestamp(...)
. The same happens if I use Updates.setOnInsert(...)
. Are these actions not allowed with findOneAndUpdate
? My purpose is to update some fields or create a new document with specific fields depending on whether a document if found or not.