Справочная информация: у меня есть документы в базе данных. Все документы имеют поля type
и asset_type
. Я хочу получить все документы type
asset
и asset_type
database
. Некоторые из документов имеют поле «оценка» со значением, а некоторые из них не имеют поля. Я также хочу отсортировать по полю score
в порядке убывания или в порядке возрастания.
Я включил $ или селектор, потому что для сортировки требуется наличие отсортированного поля как в селекторе, так и в индексе. Поскольку мне нужны все документы независимо от того, есть ли у них поле score
или нет, я использовал этот хакерский метод.
Вот одна из моих многочисленных попыток:
let params = {
'selector': {
'type': 'asset',
'asset_type': 'database',
$or: [
{'score': {'$exists': true}},
{'score': {'$exists': false}}
]
},
'use_index': 'scoreSorted'
};
if (descending) {
params.sort = [{'score': 'desc'}];
} else {
params.sort = [{'score': 'asc'}];
}
db.find(params, (err, body) => {
doSomething(body);
});
Индекс:
{
"index": {
"fields": [
"score"
]
},
"type": "json",
"ddoc": "scoreSorted"
}
Образцы документов:
{
"_id": "sample_doc1",
"type": "asset",
"asset_type": "database",
"score": 62345
},
{
"_id": "sample_doc2",
"type": "asset",
"asset_type": "database"
},
{
"_id": "sample_doc3",
"type": "asset",
"asset_type": "database",
"score": -2512
}
Это дает документы type
asset
и asset_type
database
, но они не сортируются по score
, а сортируются по _id
. Ответ также содержит предупреждение no matching index found, create an index to optimize query time.
Я тщательно просмотрел документацию, но не смог найти решение.
Может кто-нибудь указать мне решение, где сортировка работает, как я ожидаю?