Поиск веса в mongodb
Есть ли способ добавить вес-возраст для определенных полей в Mongo-db без индексации?
Формат документа:
{
"_id" : "55b3551164518e48",
"item" : "Item A",
"price": 400,
"added_date": "2015-07-22",
"seller": "Seller A"
},{
"_id" : "55b3551164518e49",
"item" : "Item A",
"price": 200,
"added_date":"2015-06-21",
"seller": "Seller B"
}
В документе, подобном приведенному выше, запрос поиска должен работать на основе приоритета в следующем порядке:
- Имя элемента
- Цена (низкая)
- Дата добавления (последняя)
Запрос поиска с "Элементом A" должен работать таким образом, чтобы сначала возвращать вторую запись, так как она имеет более низкую цену, хотя первая запись самая последняя. Есть ли способ добавить вес (важность) к полю в поисковом запросе без индексации.
Я ищу поиск поля веса, как в
db.blog.createIndex(
{
content: "text",
keywords: "text",
about: "text"
},
{
weights: {
content: 10,
keywords: 5
},
name: "TextIndex"
}
)
но без создания индекса.
2 ответа
Используйте следующее:
db.example.aggregate([
$sort: {item: 1, price: -1, added_date: 1},
$group: {_id: "$item", price: {$first: "$price"}, added_date: {$first: "$added_date"}}
]);
Поля, необходимые после группировки, нужно будет добавлять по отдельности, и их можно использовать с использованием синтаксиса, аналогичного price: {$first: "$price"}
, Хотя создание индекса является более оптимизированным способом.
Используйте структуру агрегации для вычисления ваших данных и сортировки их в соответствии с вашими потребностями