MongoDB альтернатива $ существует - PullRequest
1 голос
/ 06 февраля 2012

У меня есть 100000 документов, и мне нужно получить 10 лучших документов с самыми высокими значениями.

Вот пример упрощенного документа:

{
    "_id" : ObjectId( "4f2fbeb0369a2ba603000000" ),
    "usage" : {
        "2012" : {
            "2" : {
                "project" : {
                    "4f182a76369a2b2903000000" : {
                        "site" : {
                            "1" : 5,
                            "2" : 1
                        }
                    }
                }
            }
        }
    }
}

Значение, которое сортирует/ limit будет применен к может быть найден в 'using.2012.2.project.4f182a76369a2b2903000000.site.1' (в случае вышеприведенного примера значение равно 5).

Проблема в том, что в некоторыхДокументы этот объект существует, в других это не будет.

Теперь я мог бы использовать $ существующие, чтобы проверить, существует ли объект, но в соответствии с руководством MongoDB использование $ Существует неэффективно.Есть ли альтернативные способы, которыми я мог бы сделать это?Я могу изменить схему, если требуется, чтобы удовлетворить ..

1 Ответ

3 голосов
/ 06 февраля 2012

Если вы выполняете запрос на основе значения, которое не существует в определенных документах, документы, которые не содержат это значение, исключаются из набора результатов. Вам не нужно предварительно фильтровать их, используя $ существующие.

db.collection.find().sort( { "usage.2012.2.project.4f182a76369a2b2903000000.site.1" : -1 } ).limit(10)

Приведенный выше запрос вернет только до 10 значений - он не будет относиться к документам, где поле сортировки не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...