MongoDB сортировка по количеству вложенных документов - PullRequest
9 голосов
/ 30 сентября 2011

У меня есть документ, который выглядит примерно так:

{
        "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"),
        "parent_id" : 0,
        "ratings" : [
                "20716",
                "78167"
        ],
        "text" : "test"
}

Можно ли отсортировать по количеству "рейтингов"?Делая что-то вроде:

db.comments.find (). Sort ({rating.count (): -1})

выдает ошибку:

Синтаксическая ошибка: отсутствует: после идентификатора свойства (shell): 0

Ответы [ 2 ]

17 голосов
/ 15 февраля 2013

Уже есть помеченный ответ, но я подумал, что могу добавить, что это можно сделать с помощью структуры агрегации:

db.comments.aggregate( [
   { $unwind: "$ratings" },
   { $group : { _id : { parent_id: "$parent_id", text: "$text"  }, 
                ratingsCount : { $sum : 1 } } },
   { $sort : { ratingsCount : -1 } }
] )
8 голосов
/ 01 октября 2011

Это невозможно напрямую с mongodb [ 1 ]

Одним из решений, если вы часто используете этот запрос, является увеличение или уменьшение поля 'count' каждый раз, когда вы изменяете рейтингимассив и сортировка по этому полю.

Ваш документ будет выглядеть так:

{
    "_id" : ObjectId("4e84f78b26d2046d5d00b5b2"),
    "parent_id" : 0,
    "ratings" : [
            "20716",
            "78167"
    ],
    count : 2
    "text" : "test"
}

и вы запросите с помощью

db.comments.find().sort({count: -1})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...