2016-03-14 2 views
1

как:как получить максимальное значение поля в MongoDB

{id:4563214321,updateTime:long("124354354")} 

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

+0

вы можете получить здесь http://stackoverflow.com/questions/22118210/using-findone-in-mongodb-to-get-element-with-max-id –

ответ

4

Для достижения этой цели вы можете использовать сочетание ограничений и сортировки.

db.collectionName.find({}).sort({"updateTime" : -1}).limit(1)

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

Я бы порекомендовал добавить индекс в это поле для повышения производительности.

+0

Спасибо! Я уже пробовал этот метод, и это действительно работает. И я получил следующее об этом: например, я получил 100 документов, и еще 100 пришли. SO, база данных снова сортирует все 200 документов, так что будут введены другие данные , что означает, что каждый раз, когда в базе данных происходит обновление, он запускает все данные для сортировки. Мне интересно сейчас, если есть более эффективный способ сделать это? И есть ли возможность работать на стороне сервера, чтобы это произошло? –

+0

@OscarShaw Индекс поля, которое вы сортируете, улучшит производительность. см. https://docs.mongodb.org/manual/indexes/. Оптимизация этого вопроса - это еще один вопрос, поэтому я не слишком подробно разбираюсь здесь. это против политики SO. – Hughzi

+0

Отлично! Я думаю, что индекс поможет! Последний вопрос, и я даже не знаю, можно ли это сделать. Я получил несколько полей в одном документе. КАК я могу вернуть весь документ (все поля внутри) на основе самого большого времени обновления. Я имею в виду не только группу вместе, но и использование $ max, чтобы вернуть новое поле. Я хотел бы вернуть те самые документы, где находится самое большое updateTime. Должен ли я написать какой-нибудь javascript-метод для этого? –

0

Это повторяющийся вопрос, вы можете найти ответ в этой ссылке Using findOne in mongodb to get element with max id

использование, как это,

db.collection.find().sort({updateTime:-1}).limit(1).pretty()

, как findOne вы можете это сделать с этим синтаксисом:

db.collection.findOne({$query:{},$orderby:{_updateTime:-1}})

+0

У меня есть другой вопрос, что я получил несколько полей в одном документе. Как я могу вернуть весь документ (все поля внутри) на основе самого большого времени обновления? –

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