/ / Mongo агрегационна рамка с Mongoose повишаване на ограничението на документа за изключение при проста проекция - node.js, mongodb, mongoose, aggregation-framework

Mongo агрегиране на рамката с повишаване на Mongoose Допустимо ограничение на документа за проста проекция - node.js, mongodb, mongoose, aggregation-framework

Имам колекция звена (схема по-долу) с почти 500 000 записа.

 {
url,
title,
owner,
stars: { users: [{ name }]},
createdAt
}

и наистина не разбирам защо простата агрегационна проекция

var projection = { $project: { _id: 1, url: 1, title: 1, createdAt: 1 } }
Link.aggregate([projection]).exec(resultCallback);

повдига един

MongoError: exception: aggregation result exceeds maximum document size (16MB)

можеш ли да ми обясниш?

Използвам Mongoose (3.8.8) и Mongodb (2.6.0)

Отговори:

1 за отговор № 1

Не съм сигурен дали опциите, налични от MongoDB 2.6 и вградените, са напълно достъпни в .aggregate() прилагане на метод в мангуста. Но трябва да има опции "хеш / обект", налични след аргумента на тръбопровода. Така че основно:

var pipeline = [{ $project: { _id: 1, url: 1, title: 1, createdAt: 1 } }];
Link.aggregate(pipeline,{ cursor: true}, function(err,cursor) {

});

Или ако mongoose не харесва това по някаква причина, просто вземете суровата колекция от драйвери на възел:

var pipeline = [{ $project: { _id: 1, url: 1, title: 1, createdAt: 1 } }];
Link.collection.aggregate(pipeline,{ cursor: true}, function(err,cursor) {

if (err)
throw err;

// Do something with the cursor which is actually more akin to a node
// stream interface with a basic .next() method and other helpers.

});

В противен случай, тъй като изходът ви взривява ограничението от 16 MB BSON, винаги можете да изведете в колекция:

var pipeline = [
{ $project: { _id: 1, url: 1, title: 1, createdAt: 1 } },
{ $out: "newcollection" }
];

Но тъй като вероятно просто наистина тествате, защо просто не използвате $limit етап на тръбопровод, докато не изработите останалата част от своето обобщение:

var pipeline = [
{ $project: { _id: 1, url: 1, title: 1, createdAt: 1 } },
{ $limit: 50 }
];

Така че има няколко различни начина за справяне с нещата.