Разница, конечно, в том, что метод .aggregate()
возвращает «курсор» , где в качестве опций вы предоставляете runCommand()
ты не. На самом деле это была устаревшая форма, которая возвращала ответ в виде одного документа BSON со всеми его ограничениями . Курсоры, с другой стороны, не имеют ограничений.
Конечно, вы можете использовать метод runCommand()
, чтобы «создать свой собственный курсор» с оболочкой, поскольку в конце концов это именно то, чем является метод .aggregate()
. занимаюсь "под одеялом". То же самое касается всех драйверов, которые по существу вызывают команду базы данных для всего.
С помощью оболочки вы можете преобразовать ваш запрос следующим образом:
var cmdRes = db.runReadCommand({
"aggregate": "collectionName",
"allowDiskUse": true,
"pipeline":[
{
"$match":{
"field":param
}
}
],
"cursor": { "batchSize": 25 }
});
var cursor = new DBCommandCursor(db, cmdRes);
cursor.next(); // will actually iterate the cursor
Если вы действительно хотите покопаться в нем, введите db.collectionName.aggregate
без скобок ()
, чтобы вы фактически напечатали определение функции. Это покажет вам некоторые другие вызовы функций, и вы сможете углубиться в них и в конечном итоге увидеть, что в действительности представляют собой строки, показанные выше, среди множества других вещей.
Но то, как вы его запустили, это ответ «один документ BSON». Запустите его так, как показано здесь, и вы получите тот же самый ответ «курсора».