Поиск веса в 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"
}

В документе, подобном приведенному выше, запрос поиска должен работать на основе приоритета в следующем порядке:

  1. Имя элемента
  2. Цена (низкая)
  3. Дата добавления (последняя)

Запрос поиска с "Элементом 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"}, Хотя создание индекса является более оптимизированным способом.

Используйте структуру агрегации для вычисления ваших данных и сортировки их в соответствии с вашими потребностями

Другие вопросы по тегам