Я пытаюсь получить некоторые вещи из моего 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, поэтому мы будем благодарны за любую помощь:)
Дайте мне знать, если вам нужны дополнительные сведения!