Details
-
Bug
-
Resolution: Duplicate
-
Major - P3
-
None
-
3.9.1
-
None
-
Java 8, Windows 10, Mongo Java Driver 3.9.1, Mongo 3.4
Description
Here's my example code:
import org.bson.Document; |
|
|
import com.mongodb.client.MongoClients; |
import com.mongodb.client.MongoCollection; |
import com.mongodb.client.model.FindOneAndUpdateOptions; |
import com.mongodb.client.model.ReturnDocument; |
|
|
public class MongoFindOneAndUpdateTest { |
|
|
public static void main(String[] args) { |
// I'm running mongo 3.4 locally |
final String connStr = "mongodb://localhost:27017/test?ssl=false"; |
final MongoCollection<Document> col = MongoClients.create(connStr) |
.getDatabase("test").getCollection("fakeCol"); |
// Make sure we start with an empty collection |
col.drop();
|
// insert a simple document |
col.insertOne(new Document() |
.append("_id", "fakeId") |
.append("one", 1) |
.append("foo", "bar")); |
{
|
final Document doc = col.find().iterator().next(); |
System.out.println(doc.toJson());
|
// prints { "_id" : "fakeId", "one" : 1, "foo" : "bar" } as expected |
}
|
{
|
// Find a document with no filter and update it with no operation, |
// and then return the updated document, at least that's what I expected to happen. |
final Document doc = col.findOneAndUpdate(new Document(), new Document(), |
new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)); |
System.out.println(doc.toJson());
|
// prints { "_id" : "fakeId" } |
// What??? |
}
|
{
|
// Just to be sure the previous result is correct |
final Document doc = col.find().iterator().next(); |
System.out.println(doc.toJson());
|
// prints { "_id" : "fakeId" } |
// Yeah, the document was for some reason obliterated |
}
|
col.drop();
|
}
|
|
|
}
|
So basically if I do findOneAndUpdate with an empty Document, then it will clear out every field on the document found apart from _id.
I tried the same thing in Mongo shell, and doing db.fakeCol.findOneAndUpdate({}, {}) is not even allowed. It says "the update operation document must contain at least one atomic operator".