【发布时间】:2021-11-24 08:53:26
【问题描述】:
我正在使用 mongo-java-driver 进行 mongodb 连接,并想更新记录的子对象中的一个字段。
记录:
{
"_id": "61866c32d11c9aefb01125f7",
"number": 1900,
"oms": "ters",
"data": [
{
"empCode": "EMP2",
"firstname": "vivek",
"lastname": "bdh",
"age": 30
},
{
"empCode": "EMP3",
"firstname": "ravi",
"lastname": "sh",
"age": 30
}
],
"volgnummer": 1
}
我想更新 lastname where empCode = "EMP2"。
以下是我的代码sn-p来执行操作
public class FixDataApp {
public static void main(String[] args) throws IOException {
MongoCollection collection = MongoConfig.getCollection(args[0], args[1], "myCollection");
BasicDBObject concat = new BasicDBObject();
concat.put("$concat", Arrays.asList(
new BsonString("data.$.lastname"),
new BsonString(" TestAppendStr")));
BasicDBObject updateFields = new BasicDBObject();
updateFields.append( "data.$.lastname", concat);
BasicDBObject command = new BasicDBObject();
command.put("$set", updateFields);
UpdateResult result = collection.updateOne(
Filters.and(
Filters.eq("_id", "61866c32d11c9aefb01125f7"),
Filters.eq("data.empCode", "EMP2")
),
command
);
System.out.println("Record updated successfully " + result.getModifiedCount());
}
}
当我执行上述应用程序时出现以下错误...
Exception in thread "main" com.mongodb.MongoWriteException: The dollar ($) prefixed field '$concat' in 'data.0.lastname.$concat' is not valid for storage.
at com.mongodb.client.internal.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:1060)
at com.mongodb.client.internal.MongoCollectionImpl.executeUpdate(MongoCollectionImpl.java:1037)
at com.mongodb.client.internal.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:622)
at com.mongodb.client.internal.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:617)
at common.FixDataApp.main(FixDataApp.java:30)
任何人都可以帮助使用 $concat 和 update 方法更新此类字段。 谢谢
【问题讨论】:
标签: java mongodb mongodb-query