Mon goose агрегат не будет работать, в то время как тот же запрос в оболочке mon go работает - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь получить некоторые вещи из моего mongoDB, используя mon goose .model.aggregate, однако он продолжает возвращать пустой объект.

Я выполняю запрос в среде Node v13.8.0 ,

Совокупный запрос выглядит следующим образом:

db.getCollection("marketoffers").aggregate([
{
  $match: {
    crawledAt: 1584713771908 //req.params thingy
  }
},
{
  $unwind: {
    path: "$items",
    preserveNullAndEmptyArrays: false
  }
},
{
  $lookup: {
    from: "locales",
    pipeline: [
      {
        $match: {
          lang: "en"
        }
      }
    ],
    as: "localization"
  }
},
{
  $unwind: {
    path: "$localization",
    preserveNullAndEmptyArrays: false
  }
},
{
  $addFields: {
    "items.localizationData": {
      $filter: {
        input: {
          $objectToArray: "$localization.data"
        },
        cond: {
          $eq: ["$$this.k", "$items._tpl"]
        }
      }
    }
  }
},
{
  $unwind: {
    path: "$items.localizationData",
    preserveNullAndEmptyArrays: false
  }
},
{
  $addFields: {
    requirementsInfo: {
      $map: {
        input: "$requirements",
        as: "bidule",
        in: {
          $filter: {
            input: {
              $objectToArray: "$localization.data"
            },
            as: "truc",
            cond: {
              $eq: ["$$truc.k", "$$bidule._tpl"]
            }
          }
        }
      }
    }
  }
},
{
  $project: {
    "items.localizationData.k": 0.0,
    localization: 0.0
  }
} ]);

Этот агрегат работает в оболочке mon go и, тем не менее, выдает результаты, если я попытаюсь запустить его с mon goose .model.aggregate, он не работает:

      let test = Models.MarketOffer.aggregate([
    { $match: config }, //config is basically an object: {crawledAt: 1584713771908 }
    {
      $unwind: {
        path: "$items",
        preserveNullAndEmptyArrays: false
      }
    },
    {
      $lookup: {
        from: "locales",
        pipeline: [
          {
            $match: {
              lang: "en"
            }
          }
        ],
        as: "localization"
      }
    },
    {
      $unwind: {
        path: "$localization",
        preserveNullAndEmptyArrays: false
      }
    },
    {
      $addFields: {
        "items.localizationData": {
          $filter: {
            input: {
              $objectToArray: "$localization.data"
            },
            cond: {
              $eq: ["$$this.k", "$items._tpl"]
            }
          }
        }
      }
    },
    {
      $unwind: {
        path: "$items.localizationData",
        preserveNullAndEmptyArrays: false
      }
    },
    {
      $addFields: {
        requirementsInfo: {
          $map: {
            input: "$requirements",
            as: "bidule",
            in: {
              $filter: {
                input: {
                  $objectToArray: "$localization.data"
                },
                as: "truc",
                cond: {
                  $eq: ["$$truc.k", "$$bidule._tpl"]
                }
              }
            }
          }
        }
      }
    },
    {
      $project: {
        "items.localizationData.k": 0.0,
        localization: 0.0
      }
    }
  ]);

Я пробовал с aggregate.exe c (), с ожиданием и без него и т. д. c, тот же результат.

Коллекция называется MarketOffers и имеет следующую структуру:

{
    "_id": ObjectID("5e73ffd034e8d20025649014"),
    "items": [
        {
            "_id": "5e7396dfdcb4c11e5c2206c5",
            "_tpl": "5672cb124bdc2d1a0f8b4568",
            "upd": {
                "Resource": {
                    "Value": 0
                },
                "StackObjectsCount": 106
            }
        }
    ],
    "requirements": [
        {
            "count": 1,
            "_tpl": "56742c284bdc2d98058b456d"
        }
    ],
    "intId": 18465852853,
    "root": "5e7396dfdcb4c11e5c2206c5",
    "itemsCost": 652,
    "requirementsCost": 244,
    "sellInOnePiece": false,
    "startTime": 1584633567,
    "endTime": 1585832367,
    "loyaltyLevel": 1,
    "_tarkov_id": "5e7396dfdcb4c11e5c2206c68",
    "crawledAt": 1584650951344,
    "categoryName": "Energy elements",
    "categoryID": "5b47574386f77428ca22b2ed"
}

Models.MarketOffer - это mon goose .model, сконструированный так:

//marketoffer.ts
const MarketOfferSchema = new Schema(
    {//properties here},
    {versionKey: '0.1'});

// MarketOfferSchema.plugin(mongoosePaginate);
// must match the MarketOffers collection
MarketOfferSchema.plugin(aggregatePaginate);

export const MarketOffer = () => {
  return mongoose.model<any>('MarketOffer', MarketOfferSchema);
}

И используется в Класс модели:

//models.ts
import { SingleItem as s } from "./Item";
import { MarketOffer as m } from "./MarketOffer";

import { Locale as l } from "./Locale";

// TODO singleton
class Models {
  SingleItem;
  MarketOffer;
  Locale;
  constructor() {
    this.SingleItem = s();
    this.MarketOffer = m();
    this.Locale = l();
  }
}
export default new Models();

В действительности не используется в понедельник goose, поэтому мы будем благодарны за любую помощь:)

Дайте мне знать, если вам нужны дополнительные сведения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...