Как я могу отсортировать и получить список в сложной коллекции mongodb в Java?

1

Это мой dbcollection в mongodb

{
    "_id" : 0,
    "name" : "+Anima",
    "author" : "MUKAI Natsumi",
    "type" : [ 
        "Adventure", 
        "Fantasy"
    ],
    "chapters" : [ 
        {
            "chapterName" : "+Anima 56",
            "chapterLink" : "http://...",
            "groupTranslate" : "Manga Palace Group",
            "dateUpload" : 1359478800000,
            "chapterNumber" : 56.0000000000000000,
            "images" : [ 
                 "img0", 
                "img1", 
                "img2", 
                "img3"
            ]
        }, 
        {
            "chapterName" : "+Anima 55",
            "chapterLink" : "http://....",
            "groupTranslate" : "Manga Palace Group",
            "dateUpload" : 1410109200000,
            "chapterNumber" : 55.0000000000000000,
            "images" : [ 
                "img0", 
                "img1", 
                "img2", 
                "img3"
            ]
        }
    ]
}   

Я не могу найти сортировку главы списка по датеUpload в mongodb с помощью java-кода. Пожалуйста помоги.

  • 0
    Вы хотите, чтобы список chapters сортировался по порядку в соответствии с dateUpload , верно?
Теги:

2 ответа

2

Агрегация Mongo $ решит вашу проблему. Ниже запроса сначала $ разматывать массив chapters а затем сортировать dateUpload

    db.collectionName.aggregate({
    "$unwind": "$chapters" // unwind breaks the chapters array
}, {
    "$sort": {
    "chapters.dateUpload": -1 // then seperated chapters array sorted by dateUpload
    }
}, {
    "$group": {
    "_id": "$_id",
    "chapters": {
        "$push": "$chapters" // group used for grouping chapters array
    }
    }
}).pretty()

И для преобразования вышеуказанного запроса в java code formatt, а затем следуйте ниже mogo aggregation java driver code. Java Driver and Aggregation Framework

0

Это должно сделать это, используя aggregate():

db.foo.aggregate( [ { $project: {chapters: 1} },
                    { $unwind: "$chapters" },
                    { $sort: {"chapters.dateUpload": -1} }
                  ] );

Извлеките субдоку главы с помощью $project, затем $unwind его, чтобы деконструировать массив и получить каждый элемент, наконец, $sort them on dateUpload value (по убыванию, используйте 1 для возрастания).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню