mongo --shell file.js и израз за използване

не мога да намеря решение на прост въпрос:

Имам файл text.js

use somedb
db.somecollection.findOne()

Когато стартирам този файл в cmd с команда за пренасочване от файл: "mongo ‹ text.js"

работи правилно

Но когато опитам по този начин

"mongo text.js" или "mongo --shell test.js"

Получих това съобщение за грешка

Версия на обвивката на MongoDB: 2.2.0 свързване към: тест тип "помощ" за помощ Сряда, 5 декември 16:05:21 SyntaxError: липсва; преди израз pathToFile\test.js.js:1 не успя да се зареди: pathToFile\test.js.js

Неуспешно е при „използване на somedb“. Ако премахна този ред, той се изпълнява без грешка, но конзолата е чиста.

има ли идея какво е това и как да го оправя?

Стремя се да намеря решение за това, да създам инструмент за компилация за Sublime Text 2. Файлът за компилация по подразбиране беше

{
"cmd": ["mongo","$file"]
}

но в този случай получавам грешката по-горе

PS. веднага след публикуването на този въпрос намирам решение за SublimeText2:

{
"selector": "source.js",
"shell":true,
"cmd": ["mongo < ${file}"]
}

PSS. веднага след публикуването на този въпрос намирам решение за SublimeText3:

{
"selector": "source.js",
"shell":true,
"cmd": ["mongo","<", "$file"]
}

този инструмент за изграждане работи правилно


person VitVad    schedule 05.12.2012    source източник
comment
Стремя се да намеря решение за това за създаване на инструмент за изграждане за Sublime Text 2.   -  person VitVad    schedule 05.12.2012


Отговори (4)


use dbname е помощна функция в интерактивната обвивка, която не работи, когато използвате mongo shell с JS скрипт файл като вас.

Има множество решения за това. Най-добрият, IMO, е изрично да прехвърлите името на DB заедно с името на хоста и порта към mongo по следния начин:

mongo hostname:27017/dbname mongoscript.js // заменете 27017 с вашия номер на порт

По-добър начин да направите това е да дефинирате DB в началото на вашия скрипт:

mydb=db.getSiblingDB("yourdbname");
mydb.collection.findOne();
etc.

Последното е за предпочитане, тъй като ви позволява да взаимодействате с множество DB в един и същи скрипт, ако трябва да го направите.

person Asya Kamsky    schedule 05.12.2012
comment
Да, само бележка, за пълно съпоставяне между помощните команди на mongo shell и техните JS еквиваленти, които могат да се използват във вашия js скрипт файл, вижте документацията на mongo: docs.mongodb.org/manual/tutorial/ - person Miroslav Mocek; 09.01.2015

Можете да посочите базата данни, докато стартирате mongo клиента:

mongo somedb text.js

За да получите изхода от клиента към stdout, просто използвайте функцията printjson във вашия скрипт:

printjson(db.somecollection.findOne());
person Stefan Podkowinski    schedule 05.12.2012
comment
Идеята беше да посочите db в js файл. Виждал съм тази инициализация на mongo shell преди. Що се отнася до printjson, thx, но също има някакъв проблем. Когато стартираме printjson(db.somecollection.findOne()); получаваме резултат. Когато се опитаме да изпълним printjson(db.somecollection.find());, изглежда, че отпечатва целия обект на курсора, но не и резултат. Без printjson нищо не се връща. - person VitVad; 05.12.2012
comment
Можете просто да итерирате резултата в цикъл while във вашия скрипт и да извикате printjson за всеки отделен обект: while (cursor.hasNext()) printjson(cursor.next()); - person Stefan Podkowinski; 05.12.2012

Mongo трябва да бъде извикано от shell, за да получите този режим, с Ansible ще имате това:

- name: mongo using different databases
  action: shell /usr/bin/mongo < text.js

Вместо това:

- name: mongo breaking
  command: /usr/bin/mongo < text.js
person bbaassssiiee    schedule 24.01.2014

Това най-накрая проработи за мен на Windows + Sublime Text 2 + MongoDB 2.6.5

{
    "selector": "source.js",
    "shell":true,
    "cmd": ["mongo","<", "$file"],
    "working_dir" : "C:\\MongoDB\\bin"
} 
person Sanket Sonavane    schedule 05.12.2014