Как разбить подмассив в MongoDb, используя nodeJS - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю приложение чата с MongoDB (понедельник goose для моделирования объектов)

У меня есть коллекция room , и я храню сообщения в массиве документ комнаты.

демо:

{
    "_id" : ObjectId("5e91bcd6cd1630213d95f810"),
    "users" : [ 
        ObjectId("5e57d64d92cc878760086980"), 
        ObjectId("5e79f882def34451678278c7")
    ],
    "messages" : [ 
        {
            "_id" : ObjectId("5e95bdeb43756876056c46fc"),
            "text" : "World",
            "user" : ObjectId("5e79f882def34451678278c7"),
            "createdAt" : ISODate("2020-04-14T13:43:07.953Z")
        }, 
        {
            "_id" : ObjectId("5e95bc5c43756876056c46fb"),
            "text" : "Hello",
            "user" : ObjectId("5e79f882def34451678278c7"),
            "createdAt" : ISODate("2020-04-14T13:36:28.284Z")
        } 
    ]
}

Теперь я хочу получить сообщения 10 на 10, и я не могу использовать метод $ slice .

Как я могу получить такие сообщения:

SELECT * FROM messages WHERE createdAt > "2020-04-14T13:36:28.284Z" LIMIT 0, 10

1 Ответ

0 голосов
/ 20 апреля 2020

агрегация $ фильтр мне помогли. Спасибо @ MoazzamArif.

Chat.aggregate([

    {
        $match: {
            _id: mongoose.Types.ObjectId(roomId)
        }
    },

    {
        $project: {
            messages: {
                $filter: {
                    input: "$messages",
                    as: "message",
                    cond: {
                        $gt: ['$$message.createdAt', new Date('2020-04-14T13:36:28.284Z')]
                    }
                }
            }
        }
    }

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