2015-12-12 6 views
2

Я работаю над разработкой функции веб-приложения, предлагающей цены для пользователей на основе предыдущих заказов в базе данных. Я использую базу данных MongoDB NoSQL. Прежде чем начать, я пытаюсь найти лучший способ настроить объект заказа для возврата правильных результатов.Запрос точных совпадений в MongoDB

Когда пользователь делает заказ, например: 1 cheeseburger + 1 fry, McDonalds, 12345 E. Street, MyTown, USA ... он должен возвращать только те объекты, которые являются ТОЧНЫМИ соответствиями из базы данных.

Например, я бы не хотел получать заказ, содержащий 1 cheeseburger + 1 fry + 1 shake. Я буду поддерживать средние цены и рассчитывать за этот точный порядок.

{ 
    restaurantAddress: "12345 E. Street, MyTown, USA", 
    restaurantName: "McDonald's", 
    orders: { 
     { cheeseburger: 1, fries: 2 } 
       : { 
        sumPaid: 1444.55, 
        numTimesOrdered: 167, 
        avgPaid: 8.65 (gets recomputed w/ each new order) 
       }, 
     { // repeat for each unique item config }, 
     { // another unique item (or items) } 
} 

Считаете ли вы, что это эффективный и эффективный способ создания документа в MongoDB? Или я должен использовать несколько документов?

Если это действительно, как я могу запросить его только для возврата точных заказов? Я посмотрел на $eq, но, похоже, это не то, что я искал.

ответ

1

Таким образом, я считаю, что мы решили проблему. Решение состоит в том, чтобы создать строку, уникальную для заказа на стороне сервера. Например, мы напишем функцию, которая преобразует 1 cheeseburger + 2 fries в burger1fries2. Чтобы сохранить согласованность в базе данных, мы сначала отсортируем записи по алфавиту, поэтому мы всегда будем использовать то, что мы планировали с запросом. Аналогичный порядок 2 fries + 1 cheeseburger будет генерировать строку burger1fries2.

Смежные вопросы