Saya memiliki koleksi yang berisi dokumen seperti berikut:

{
    "conversation_id" : 1,
    "message_id" : 4, //Message number inside the conversation
    "text" : "..."
}

Bagaimana cara mendapatkan pesan terbaru dari berbagai id percakapan?

1
NoTrust 12 Maret 2017, 16:37

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan agregasi untuk mencocokkan id percakapan di larik Anda, lakukan $sort menurut message_id lalu $group mengambil item pertama untuk setiap percakapan :

var conversationIds = [1, 2];

db.conversations.aggregate({
    $match: {
        "conversation_id": {
            "$in": conversationIds
        }
    }
}, {
    $sort: {
        "message_id": -1
    }
}, {
    $group: {
        _id: "$conversation_id",
        message_id: {
            $first: "$message_id"
        },
        document: {
            $first: "$$ROOT"
        }
    }
})
1
Bertrand Martel 12 Maret 2017, 14:11

Saat membuat dokumen, Anda harus menambahkan properti baru bernama created. Saat Anda menanyakan percakapan tertentu, Anda dapat mengurutkannya pada stempel waktu yang disediakan di created.

Anda mungkin harus dapat mengurutkan _id serta _id naik dengan cara yang telah ditentukan sebelumnya.

0
Jonathan 12 Maret 2017, 13:43