Как объединять и сортировать вложенные поддокументы с агрегацией в mongoose - PullRequest
0 голосов
/ 02 марта 2020

Рассмотрим, у меня есть эти три примера схемы, где mainScheam является фактическим документом, а другие схемы ("activitySchema", "essentialSchema") являются поддокументами.

Я использовал псевдотипы в схемах только для примера Цель и ясное понимание

Схемы

let activitySchema = new Schema({
    "_id":ObjectID,
    "title":string,
    "created_at":new Date(),
    "created_by":ObjectID,
});

let essentialSchema = new Schema({
    "_id":ObjectID,
    "activity":[activitySchema],
    "created_at":new Date(),
    "created_by":ObjectID,
});

let mainSchema = new Schema({
    "_id":ObjectID,
    "name":string,
    "activity":[activitySchema],
    "essential":[essential],
    "created_at": new Date(),
    "created_by":ObjectID,
}); 

let Main = mongoose.model("main", mainSchema);

Основной документ в базе данных похож на этот

{
    "id":"...",
    "name":"rpc",
    "activity":[{
        "_id":"...",
        "title":"abc de",
        "created_at":12345...,
        "created_by":"...",
    }, {
        "_id":"...",
        "title":"defg",
        "created_at":12467...,
        "created_by":"...",
    }],
    "essential":[{
        "_id":"...",
        "activity":[{
            "_id":"...",
            "title":"usidl kdsl",
            "created_at":2128...,
            "created_by":"...",
        }],
        "created_at":2125...,
        "created_by":"...",
    }],
    "created_at":2105...,
    "created_by":"...",
}

Теперь я должен узнать последние / последние действия из Выше mainSchema и вложенных документов Из вышеприведенного примера я должен вернуть отсортированную активность в соответствии с временем создаваемого времени.

{
    "_id":"...",
    "title":"usidl kdsl",
    "created_at":2128...,
    "created_by":"...",
}

Я использую статистические данные, но не знаю, как достичь своей цели?

const mains = await Main.aggregate([
    {
        $project:{
            "name":"$name",
            "last_activity":sort("$activity", "$essential.activity"), //-- This is the part where I don't know what to do
            "created_at":"$created_at",
        },
    }
]);
...