我有一个用例来更新mongoDB集合中的数据,平均大小为250kb。用例:将字段版本的数据类型从String转换为Long。
我想以有效的方式来做。从Java中寻找选项,也可以通过直接的mongo查询。
MongoQuery发现:
db.collection.updateMany({version : {$type: "string"}}, {$set: {version: {$toLong: "$version"}}})
在java中尝试这样的东西,却找不到版本。
Bson filter = new Document("version", new Document("$type", "string"));
Bson newValue = new Document("version", *****);
Bson updateOperationDocument = new Document("$set", newValue);
collection.updateMany(filter, updateOperationDocument);
如何做到这一点,没有找到正确的方法。
1条答案
按热度按时间gopyfrb31#
我不太清楚你问题的范围。但是你提到你正在寻找直接的MongoDB查询来实现,并且在你分享的那个查询中有一个错误,所以这就是这个答案的重点。
正如我们在this playground example中看到的,更新实际上并没有完成预期的任务。它向我们展示了以下文件:
修改如下:
version
到{ "$toLong": "$version" }
的字面翻译与当前编写的命令的语义有关。正如这个答案中所概述的,MongoDB中实际上有两个不同的$set
运算符。您当前使用的是更新修饰符,但由于您引用的是另一个字段,因此需要改用聚合阶段。好消息是转换非常简单,只需将命令的第二个参数括在方括号中即可。在这种情况下,我们希望将其更改为:
收件人:
这种替代语法会导致对我们前面看到的示例文档进行以下更改:
了解它在this other playground example中的工作原理