lean() больше не работает при переходе от stream () к cursor()


Что касается предупреждения об устаревании, добавленного здесь, кажется, что cursor() является падающей заменой для stream(), однако есть некоторая функциональность, которая, кажется, осталась позади.

Например, этот устаревший код будет иметь "бережливые" документы, которые являютсяне экземплярами mongoose.Document:

Cat
    .find({ }).lean()
    .stream()
    .on('data', function (data) {
        var value = data instanceof mongoose.Document;
        console.log('lean().stream() data instanceof mongoose.Document', value);
    })
    .on('end', function () { });

И этот код будет иметь документы мангуста, даже если lean() используется:

Cat
    .find({ }).lean()
    .cursor()
    .on('data', function (data) {
        var value = data instanceof mongoose.Document;
        console.log('lean().cursor() data instanceof mongoose.Document', value);
    })
    .on('end', function () {});

Что является супер странным, так как их исходный код в момент это изменение выглядит идентично:

stream(): https://github.com/Automattic/mongoose/blob/94557653dba2cd9046f1b2ffab427cef4632a7c3/lib/query.js#L2769

cursor(): https://github.com/Automattic/mongoose/blob/94557653dba2cd9046f1b2ffab427cef4632a7c3/lib/query.js#L2816

Есть ли правильный способ достичь этого с помощью cursor() или я нашел ошибку? Заранее спасибо;)

1 2

1 ответ:

Я нашел после исследования (и благодаря комментарию JohnnyHK), похоже, что он не был реализован в cursor(), поэтому я сделал запрос pull, чтобы исправить эту проблему https://github.com/Automattic/mongoose/pull/4255