Поддерживает ли MongoDB порядок сортировки входных данных во время группировки? [Дубликат]

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

Ваш пример:

import unittest
from python_wrap_cases import wrap_case


@wrap_case
class TestSequence(unittest.TestCase):

    @wrap_case("foo", "a", "a")
    @wrap_case("bar", "a", "b")
    @wrap_case("lee", "b", "b")
    def testsample(self, name, a, b):
        print "test", name
        self.assertEqual(a, b)

Консольный выход:

testsample_u'bar'_u'a'_u'b' (tests.example.test_stackoverflow.TestSequence) ... test bar
FAIL
testsample_u'foo'_u'a'_u'a' (tests.example.test_stackoverflow.TestSequence) ... test foo
ok
testsample_u'lee'_u'b'_u'b' (tests.example.test_stackoverflow.TestSequence) ... test lee
ok

Также вы можете использовать генераторы . Например, этот код генерирует все возможные комбинации тестов с аргументами a__list и b__list

import unittest
from python_wrap_cases import wrap_case


@wrap_case
class TestSequence(unittest.TestCase):

    @wrap_case(a__list=["a", "b"], b__list=["a", "b"])
    def testsample(self, a, b):
        self.assertEqual(a, b)

Выход консоли:

testsample_a(u'a')_b(u'a') (tests.example.test_stackoverflow.TestSequence) ... ok
testsample_a(u'a')_b(u'b') (tests.example.test_stackoverflow.TestSequence) ... FAIL
testsample_a(u'b')_b(u'a') (tests.example.test_stackoverflow.TestSequence) ... FAIL
testsample_a(u'b')_b(u'b') (tests.example.test_stackoverflow.TestSequence) ... ok

4
задан orcaman 17 September 2014 в 16:35
поделиться

2 ответа

Вы можете попробовать следующий запрос агрегации, который использует атрибут max: http://docs.mongodb.org/manual/reference/operator/aggregation/max/

db.collection.aggregate([
   $group: {
       "_id": "$session",           
       "age": { $max: "$age" }
     },
   { $out : "max_age" }
])

Результаты должны выводиться в новую коллекцию max_age, а затем вы можете сбросить ее в csv.

Примечание: он даст только сеанс и максимальный возраст и не вернет другие поля.

-4
ответ дан Lalit Agarwal 28 August 2018 в 14:24
поделиться

Агрегация MongoDB предлагает оператор $max , но в вашем случае вы хотите, чтобы «целая» запись была такой, какая есть. Таким образом, подходящей задачей является $sort , а затем использовать оператор $first в инструкции $group :

db.collection.aggregate([
    { "$sort": { "session": 1, "age": -1 } },
    { "$group": {
        "_id": "$session",
        "age": { "$first": "$age" },
        "firstName": { "$first" "$firstName" },
        "lastName": { "$first": "$lastName" }
    }}
])

Таким образом, «сортировка» получает право порядка, а «группировка» выбирает первое вхождение в ключ «группировки», где эти поля существуют.

В основном $first здесь, потому что $sort выполняется в обратном порядке. Вы также можете использовать $last в порядке возрастания.

11
ответ дан Neil Lunn 28 August 2018 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: