2015-10-09 5 views
1

Я не получаю вывод при передаче ObjectId даже там, где есть совпадение, и когда я запускаю ту же команду из оболочки mongo, она работает. В чем может быть проблема?Выход скрипта Mongo shell vs отличия в выводах от Mongo-shell

mongo myDB --eval 'db.myUserDocColl.find({"_id" : ObjectId("55fd20104ead737a83540a91")},{name:1,email:1,mobileNumber:1,"_id":0});' 

Выход

MongoDB shell version: 3.0.2 
connecting to: myDB 
DBQuery: myDB.myUserDocColl -> { "_id" : ObjectId("55fd20104ead737a83540a91") } 
+0

Можете ли вы вставить выходные данные из manogshell здесь? –

ответ

1

Существуют различия между interactive and scripted mode для оболочки.

При запуске JavaScript в оболочке курсор возвращаемый find() запроса automatically iterated:

Метод db.collection.find() возвращает курсор. Чтобы получить доступ к документам, вам необходимо выполнить итерацию курсора. Однако в оболочке mongo, если возвращенный курсор не назначен переменной с использованием ключевого слова var, курсор автоматически повторяется до 20 раз для печати до первых 20 документов в результатах.

Если запустить то же JavaScript в сценарном режиме (т.е. прохождение через опцию командной строки, как --eval), вам нужно явно итерация курсора и распечатать результаты с помощью print() или printjson():

mongo myDB --quiet --eval 'printjson(db.myUserDocColl.find({"_id" : ObjectId("55fd20104ead737a83540a91")},{name:1,email:1,mobileNumber:1,"_id":0}).toArray())' 

I также добавила опцию --quiet в эту примерную командную строку, которая удаляет дополнительный вывод, который часто не нужен для скрипта (например, заголовок версии оболочки и сообщение «connect to ...»).

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