Получение java.lang.IllegalArgumentException: неверное имя поля BSON _id.orderId при обновлении коллекции монго - PullRequest
0 голосов
/ 28 июня 2019

Я обновляю документ коллекции mongo с помощью updateOne (). Я передаю filter, updatepart (оба типа BSON), опции update в качестве параметров для updateOne (). И коллекция, которую я создал программным образом, имеет ключ шарда (orderId).Однако первичным ключом для моей коллекции является составной ключ (orderId и lineNumber). Я могу вставить в свою коллекцию, но при обновлении документа (вставляя subobj, который имеет свой собственный ключ, внутри основного json), я получаю java.lang.IllegalArgumentException: Неверное имя поля BSON _id.orderId. Так что я подозреваю, что это может быть связано с конфигурацией ключа шарда.На самом деле, он не берет фильтр (фильтр имеет составные ключи), который я передаю в методе updateOne, и выдает неверную ошибку имени поля.Может ли кто-нибудь пролить свет на это. Я должен иметь возможность обновить документ с помощью subobj.

Я использую драйвер monogDb 3.2.2

Примечание: я уже пробовал использовать метод replaceOne вместоupdateOne, а также replaceOne Я не могу использовать, так как в моем случае мое обновление на самом деле представляет собой вставку subobj (массива) внутри основного json.

код создания коллекции осколков ``

BsonDocument cmd = new BsonDocument();
            cmd.append("customAction", new BsonString("createCollection"))
                    .append("collection", new BsonString("collectionName"))
                    .append("shardKey", new BsonString("_id.orderId"))
                    .append("offerThroughput", new BsonInt32(Integer.parseInt("50000")))

;``

upsert part: (просто игнорируйте логику для updatePart, когда я соединяю ключ subobj) ``

Bson filter = Filters.eq("_id.orderId", orderId);
Bson filter1 = Filters.eq("_id.lineNumber", lineNumber);
Map<String, String> keyval = mapper.readValue(data, Map.class);
Entry<String, String> itr = keyval.entrySet().iterator().next();
String keyname = itr.getKey();          
org.bson.Document newdoc = org.bson.Document.parse(mapper.writeValueAsString(itr.getValue()));
Bson finalfilter = Filters.and(filter,filter1);                         
Bson updatePart = combine(set(nodeName.concat(".").concat(keyname), newdoc));
UpdateResult result = dbccollection.updateOne( updatePart,finalfilter,                                  new UpdateOptions().upsert(true));

``

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...