MongoClient eval создает исключение из коллекции - PullRequest
0 голосов
/ 07 февраля 2019

Я обновил mongo-java-driver (2.11.3 => 3.9.0) и mongo (2.6 => 4.0.5), и моя функция eval() с function(source, target){db.getCollection(source).copyTo(target)} начала выдавать исключение:

[ERROR] ' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "Error: {\n\t\"ok\" : 0,\n\t\"errmsg\" : \"can't send a shardVersion with the 'eval' command, since you can't use sharded collections from 'eval'\",\n\t\"code\" : 20,\n\t\"codeName\" : \"IllegalOperation\"\n} :\n_getErrorWithCode@src/mongo/shell/utils.js:25:13\nDB.prototype.eval@src/mongo/shell/db.js:752:1\nDBCollection.prototype.copyTo@src/mongo/shell/collection.js:906:1\n@:1:27\n", "code" : 139, "codeName" : "JSInterpreterFailure" }
[ERROR]     at com.gwtplatform.dispatch.rpc.server.AbstractDispatchImpl.doExecute(AbstractDispatchImpl.java:164)
            ....
[ERROR]     at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
[ERROR]     at java.lang.Thread.run(Thread.java:748)
[ERROR] Caused by: com.mongodb.MongoCommandException: Command failed with error 139 (JSInterpreterFailure): 'Error: {
[ERROR]     "ok" : 0,
[ERROR]     "errmsg" : "can't send a shardVersion with the 'eval' command, since you can't use sharded collections from 'eval'",
[ERROR]     "code" : 20,
[ERROR]     "codeName" : "IllegalOperation"
[ERROR] } :

Я понимаю, что не могу использовать eval с осколочными коллекциями.Документация Mongo:

Нельзя использовать db.eval () с осколочными коллекциями.В общем, вы должны избегать использования db.eval () в сегментированных кластерах;тем не менее, можно использовать db.eval () с неэкранированными коллекциями и базами данных, хранящимися в сегментированном кластере. db.eval ()

Однако мои коллекции не очищены (это работало с предыдущими версиями mongo и драйвера).

все же я проверил набудь уверен (поправь меня, если я ошибаюсь):

Команда: db.getCollection("collection").getShardDistribution()

Результат: Collection db.collection is not sharded.

Есть идеи?

Забыли добавить код Java, который использует драйвер:

import com.mongodb.DB;
DB db = ...;
db.eval(COPY_COLLECTION_FUNCTION, name, targetName);
...