Проблема в том, что вы ожидаете того же результата, который вы видите в REPL при вводе db.myFirstCollection.find()
, но это не то, что происходит здесь.Как уже говорилось, это REPL , что означает, что оператор оценивается как «левый», если иное не присвоено переменной или, в данном случае, «внутри функции».
Так просточто-то для «вывода» на печать:
var collectionCreation = function(){
db.myFirstCollection.find().forEach(printjson)
};
collectionCreation();
То, что вы видите в оболочке db.myFirstCollection.find()
, это то, что «левостороннее назначение» Cursor
, которое затем оценивается, и первые 20 результатов повторяются..
Аналогичным образом можно остановить это, выполнив:
var cursor = db.myFirstCollection.find()
, который не «печатает» эти результаты, пока вы не «оцените»:
cursor
Который затем распечатает следующие 20, что является оценкой по умолчанию.
Поэтому, когда вы «пишете сценарии», вам действительно нужно что-то сделать с возвращенным результатом Cursor
.В этом случае forEach()
результаты и printjson
на каждой итерации.
Если вы собираетесь "поиграть" с этим, я предлагаю вам прочитать Писать сценарии для mongo
Shell , а также Перемещение курсора в mongo
Shell в основной документации.Они охватывают большинство различий, с которыми вы столкнетесь при работе со «сценариями» по сравнению с «интерактивной» формой, когда вы просто набираете вещи в REPL , который является оболочкой mongo
.
Quick Demo
Создайте файл как test.js
(function() {
db.test.remove({});
db.test.insertMany([1,2,3].map(n => ({ n })));
})()
var listtest = function() {
db.test.find().forEach(printjson)
}
listtest();
Затем просто выполните в "тестовом" пространстве имен базы данных по умолчанию как:
mongo --quiet test.js
Возвращает:
{ "_id" : ObjectId("5b13b91a71a13254af4e278e"), "n" : 1 }
{ "_id" : ObjectId("5b13b91a71a13254af4e278f"), "n" : 2 }
{ "_id" : ObjectId("5b13b91a71a13254af4e2790"), "n" : 3 }
Обратите внимание, что аналогичным образом ответы deleteMany()
и insertMany()
также подавляются при переносе во внутреннюю функцию, поэтому их результаты не "оцениваются слева".