Сортировка по вложенному полю с использованием MongoDB - PullRequest
0 голосов
/ 08 марта 2011

У меня есть данные, хранящиеся в коллекции примерно так:

{
    "_id" : ObjectId("..."),
    "content" : [
        ["a","b",7],
        ["a","b",19],
        ["c","c",3],
        ["d","a",5]
    ]
}

Я хочу получить одну запись из коллекции (что достаточно просто), но я хочу вернуть эти данные, отсортированные по содержимому, используя 3-й столбец каждого массива. Это значит, что я хотел бы вернуть запись (показанную выше), но содержимое должно быть отсортировано так:

    "content" : [
        ["c","c",3],
        ["d","a",5],
        ["a","b",7],
        ["a","b",19]
    ]

Возможно ли это, или мне просто нужно выбрать элемент и затем отсортировать его на стороне сервера?

примечание: я использую драйвер Ruby mongo

Ответы [ 3 ]

0 голосов
/ 08 марта 2011

Я также понял, что наличие этого вложенного массива (ов) является более сложной задачей, чем просто наличие массива объектов, поэтому я перехожу к этому для моей ситуации.Существует некоторое обсуждение поддержки вложенных позиционных операторов: http://jira.mongodb.org/browse/SERVER-831

0 голосов
/ 08 марта 2011

Вам нужно выбрать и отсортировать на стороне клиента. MongoDB не сортирует вложенные объекты. Если вы хотите, чтобы MongoDB сортировал их, вам придется разбить данные «контента» на собственную коллекцию.

0 голосов
/ 08 марта 2011

Например:

hash = {
    "_id" => "id",
    "content" => [
        ["a","b",7],
        ["a","b",19],
        ["c","c",3],
        ["d","a",5]
    ]
}
hash["content"].sort!{|a,b| a.last <=> b.last}
p hash # => {"_id"=>"1", "content"=>[["c", "c", 3], ["d", "a", 5], ["a", "b", 7], ["a", "b", 19]]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...