2015-06-18 4 views
0

У меня есть 2 коллекции следующегозаписей Сортировать по коллекциям картографирования

Автор:

{id:'1',name:'JK', bookCount:3} 
    {id:'2',name:'SS', bookCount:2} 
    {id:'3',name:'CC', bookCount:4} 

Книга: (AuthorID: внешний ключ Автор коллекций)

{name:'Book 1',authorId:1} 
    {name:'Book 2',authorId:1} 
    {name:'Book 3',authorId:1} 
    {name:'Book 4',authorId:2} 
    {name:'Book 5',authorId:2} 
    {name:'Book 6',authorId:3} 
    {name:'Book 7',authorId:3} 
    {name:'Book 8',authorId:3} 
    {name:'Book 9',authorId:3} 

I хотите написать запрос о манго, который дает книги, упорядоченные по -> количеству книг, написанных соответствующими uthor в порядке возрастания, т. е.

{name:'Book 4',authorId:2} 
    {name:'Book 5',authorId:2} 
    {name:'Book 1',authorId:1} 
    {name:'Book 2',authorId:1} 
    {name:'Book 3',authorId:1} 
    {name:'Book 6',authorId:3} 
    ....... 

Как это сделать. Thanx заранее! :)

+1

Вы не можете присоединиться к нескольким коллекциям в MongoDB напрямую в одном запросе. –

ответ

1

В соответствии с вашей продукции вы должны обязательно только агрегацией на книге сбора и запрос агрегации, как показано ниже:

db.book.aggregate({ 
    "$group": { 
    "_id": "$authorId", 
    "names": { 
     "$push": "$name" 
    }, 
    "count": { 
     "$sum": 1 
    } 
    } 
}, { 
    "$unwind": "$names" 
}, { 
    "$sort": { 
    "count": 1 
    } 
}, { 
    "$project": { 
    "name": "$names", 
    "authorId": "$_id", 
    "_id": 0 
    } 
}) 
+0

ОП пытается заказать «книги» по алфавитному имени автора из коллекции «автор». –

0

шагов:

1) групповых данных, основанных на AuthorID и принять граф и также сделать массив, содержащий все книги в этой группе

2) разматывать книга массив

3) сортировать по полю поля, который вы создали во время группировки

4) наконец-то проект в нужном вам формате.

db.book.aggregate([ 
{"$group": { "_id" : "$authorId", "count": {"$sum" : 1}, 
    "arr" : {"$push" : "$name" }} 
}, 
{"$unwind" :"$arr"}, 
{"$sort":{"$count": 1 }}, 
{"$project": {"name" : "$arr", "authorId" : "$_id"} 
} 
]); 
+0

Вы не читали вопрос. OP хочет, чтобы их коллекция «книг» упорядочивалась по имени автора из коллекции «автор». Следовательно, "присоединиться" –