我有两份文件
/* 1 */
{
"lastUpdated" : ISODate("2019-01-01T01:01:20.201Z"),
"content" : "someText01",
}
/* 2 */
{
"lastUpdated" : ISODate("2020-11-11T16:11:20.202Z"),
"content" : "someText02",
}
现在我想更新文档--创建新的字段作为lastUpdated字段的副本。
在robo3T中,我可以做这样的事情。
db.getCollection('someDocuments').update({},
[
{"$set": {"byMongoQuery": "$lastUpdated", }}
],
{"multi": true}
)
现在我想用java代码(mongo-java-driver 3.9.0)来做同样的事情,我做了这样的事情。
mongodb.getCollection("someDocuments").updateMany(Document.parse("{}"), Document.parse("{$set: {'byJavaApi': '$lastUpdated'}}"))
mongodb是com.mongodb.client.MongoDatabase的实例。
由于某种原因,值被设置为明文。
我使用的是Mongodb 4.2.6mongo-java-driver 3.9.0。
问题:如何使用java代码来设置这个字段?
如何用java代码设置这个字段。我更喜欢用 updateMany,因为有很多这样的记录。
为什么结果不一样。我还以为mongdb里有什么共同的引擎来执行。而这是完全相同的查询。
您的更新使用的是 MongoDB v4.2 的特点 管道式更新. 你可以使用以下代码 MongoDB Java 驱动程序 v3.11 或更高. 使用其他字段的值更新字段。
Bson query = new Document();
List<Bson> updatePipeline = Arrays.asList(Fiters.eq("$set", Filters.eq("byMongoQuery", "$lastUpdated")));
UpdateResult result = collection.updateMany(query, updatePipeline);