Какой быстрый способ проверить, является ли элемент самой последней версией в mongodb? - PullRequest
2 голосов
/ 04 августа 2010

У меня есть коллекция элементов в mongodb, которые выглядят так (я использую pymongo):

{'type':'_sometype', 'name':'_somename', 'date':datetime, 'incoming':bool}

type и name не уникальны для всех элементов, поэтому можноесть предметы с одинаковыми type и name, но различающимися date с.


Проблема: иногда мне нужно будет определить, был ли предмет найден в некоторыхзапрос является последней версией этого элемента.Я делал следующее:

def isLatest(item):
        return not collection.find_one({'date':{'$gt':item['date']},
                                        'type':item['type'],
                                        'name':item['name'],
                                        'incoming':item['incoming']})

, который просто запрашивает у mongodb соответствующий элемент, который имеет более свежее значение для date.Если такой элемент найден, эта функция возвращает False (потому что переданный item не является последней версией).

Я вызываю эту функцию много раз, один раз для каждого элемента в данном запросе,и мне кажется, что был бы гораздо лучший способ сделать это, чем неоднократно запрашивать некоторые данные.Если это не выглядит нормально для всех, в таком случае я благодарю вас за вашу оценку: D

Любые мысли приветствуются, заранее спасибо,

-S

Ответы [ 3 ]

0 голосов
/ 05 августа 2010

Я вызываю эту функцию много раз, по одному разу для каждого элемента в данном запросе, и мне кажется, что был бы гораздо лучший способ сделать это, чем неоднократно запрашивать некоторые данные. Если это не выглядит хорошо для всех, в таком случае я благодарю вас за вашу оценку: D

Если честно, если вам нужно постоянно проверять, является ли он последним, вам нужно будет отправлять запросы. Это неизбежно - акт необходимости знать требует запроса.

Если частые запросы к базе данных вас не беспокоят (т. Е. Вызывают другие трудности или осложнения), то я не вижу в этом ничего плохого. Если вызывает проблем, это может быть дизайн самого приложения, которое необходимо пересмотреть. Не зная больше о том, чего вы пытаетесь достичь, довольно сложно сказать. Лично я бы сказал, что если все выглядит хорошо, вам, вероятно, не о чем беспокоиться. Как всегда, просто убедитесь, что ваш запрос не менее эффективен, чем должен быть.

0 голосов
/ 08 августа 2011

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

0 голосов
/ 04 августа 2010

Не зная больше деталей о вашем приложении, чем то, что вы предоставили, мне кажется, что было бы лучше иметь отдельную коллекцию, которая хранит только последнюю версию и индексируется по имени типа;и отдельная коллекция для исторических версий.

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