2015-04-17 1 views
4

Я реализовал функцию JavaScript внутри сервера Mongodb, используя this example.Как выполнить скрипт jQuery MongoDB с помощью Java MongoDriver

Он отлично работает, когда я использую оболочку mongo, но я хочу запустить его из программы Java. Это код:

public String runFunction() { 

    CommandResult commandResult1 = db.command("db.loadServerScripts()"); 
    CommandResult commandResult2 = db.command("echoFunction(3)"); 

    return commandResult2.toString(); 
} 

Я не понимаю результат.

+0

Какой результат вы получаете, когда пытаетесь его в оболочке монго? Какой результат вы получаете на Java? Может быть, вы должны написать другой скрипт, который выполняет обе эти команды, кажется, что вы игнорируете commandResult1. – Jim

+0

Когда я использую первую команду оболочки mongo, db.loadServerScripts(). Затем запустите echoFunction (3). Он работает нормально, он печатает 3. При использовании java-программы я получил этот результат: -
** {"ok": 0.0, «errmsg»: «no such cmd: echoFunction (3)», «code»: 59, «bad cmd»: {"echoFunction (3)": true}} ** – Tharanga

+0

Вы купите этот ответ в другом потоке. https://stackoverflow.com/questions/47093563/how-to-execute-mongodb-native-query-json-using-mongo-java-driver-only/47097555#47097555 –

ответ

1

Вы должны использовать DB.eval(), см. api docs и убедитесь, что вы не выполняете конкатенацию строк. Передайте переменные вместо этого.

Я думаю, что ваш ответ, вероятно, тот же ответ, что и this other one on StackOverflow.

2

Предыдущие ответы не работают в MongoDB 3.4+. Правильный способ сделать это в версии 3.4 и выше - это создать объект BasicDBObject и использовать его в качестве параметра Database.runCommand(). Вот пример.

final BasicDBObject command = new BasicDBObject(); 
      command.put("eval", String.format("function() { %s return;}}, {entity_id : 1, value : 1, type : 1}).forEach(someFun); }", code)); 
      Document result = database.runCommand(command); 
1
@Autowired 
private MongoOperations mongoOperations; 

private final BasicDBObject basicDBObject = new BasicDBObject(); 

@PostConstruct 
private void initialize() { 
    basicDBObject.put("eval", "function() { return db.loadServerScripts(); }"); 
    mongoOperations.executeCommand(basicDBObject); 
} 

private void execute() { 
    basicDBObject.put("eval", "function() { return echoFunction(3); }"); 
    CommandResult result = mongoOperations.executeCommand(basicDBObject); 
} 

И тогда вы можете использовать что-то вроде:

ObjectMapper mapper = new ObjectMapper(); 

И MongoOperation-х:

mongoOperations.getConverter().read(CLASS, DBOBJECT); 

Просто попробуйте иметь некоторые обходной путь зависит от ваших требований

Смежные вопросы