Подтвердить что ты не робот

Mongo dbname --eval 'db.collection.find()' не работает

Почему это работает:

# mongo dbname
MongoDB shell version: 1.8.3
connecting to: nextmuni_staging
> db.collection.find()
{ "foo" : "bar" }
> bye

Пока это не работает:

# mongo localhost/dbname --eval 'db.collection.find()'
MongoDB shell version: 1.8.3
connecting to: localhost/dbname
DBQuery: dbname.collection -> undefined

Он должен быть точно таким же, no?

Спасибо!

4b9b3361

Ответ 1

Возвращаемое значение db.collection.find() - это тип курсора. Выполнение этой команды изнутри оболочки создаст курсор и покажет вам первую страницу данных. Вы можете начать перебирать остальных, повторяя команду "it".

Я думаю, что объем переменных, используемых во время выполнения eval'd script, предназначен только для времени жизни script (данные могут быть сохранены в коллекциях, конечно), поэтому, когда script завершает этот курсор переменные больше не существуют и поэтому вы можете отправить еще один eval script, чтобы перечислить данные. Таким образом, поведение, которое вы получаете во время сеанса оболочки, действительно не работает с eval script.

Чтобы приблизиться к поведению, вы можете запустить что-то вроде этого:

mongo dbname --eval "db.collection.find().forEach(printjson)"

Это показывает вам, что команда выполняет и создает курсор, который затем можно перебрать по отправке вывода в стандартный вывод.

Изменить: я думаю, что точка, которую я пыталась сделать, заключалась в том, что команда, которую вы выдаете, работает только на том, что вы не ожидаете.

Ответ 2

Функции printjson покрывают много места при написании сценариев с помощью mongo --eval '...'. Вместо привязки .forEach вы можете просто обернуть свой вызов.

$ mongo --eval 'db.stats_data.stats()' db_name
MongoDB shell version: 2.4.14
connecting to: db_name
[object Object]

$ mongo --eval 'db.stats_data.stats().forEach(printjson)' db_name
MongoDB shell version: 2.4.14
connecting to: db_name
Tue Jan 10 15:32:11.961 TypeError: Object [object Object] has no method 'forEach'

$ mongo --eval 'printjson(db.stats_data.stats())' db_name
MongoDB shell version: 2.4.14
connecting to: db_name
{
    "ns" : "db_name.stats_data",
    "count" : 5516290,
    "size" : 789938800,
    "avgObjSize" : 143.20110073980882,
    "storageSize" : 1164914688,
    "numExtents" : 18,
    "nindexes" : 3,
    "lastExtentSize" : 307515392,
    "paddingFactor" : 1.0000000000000457,
    "systemFlags" : 1,
    "userFlags" : 0,
    "totalIndexSize" : 1441559616,
    "indexSizes" : {
        "_id_" : 185292688,
        "owner_id_key_idx" : 427678384,
        "onwer_metric_key_idx" : 828588544
    },
    "ok" : 1
}