MongoDB поиск - найти новейший документ - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть коллекция, содержащая несколько сотен тысяч документов, и мне нужно эффективно проверить один из этих документов.

Вот пример одного из этих документов:

{
    "_id" : ObjectId( "4ee9b4239641dce218030000" ),
    "last_seen" : Date( 1323938851402 ),
    "is" : {
        "4ee910de9641dc4906000000" : Date( 1323938851302 ),
        "4ee211df9621dc4206000000" : Date( 1323938851402 ),
        "4ef913de9631db4922000000" : Date( 1323938851102 ),
    }
}

Я знаю, что _id документа - 4ee9b4239641dce218030000, и мне нужно определить, является ли элемент в объекте "is" с идентификатором 4ee211df9621dc4206000000 самым новым из 3 и имеет значение метки времени за последние 5 минут.

Если это поможет, отметка времени, сохраненная в «last_seen», всегда будет иметь то же значение, что и последняя запись в объекте «is». Возможно, их можно сравнить?

Есть мысли о том, как это можно эффективно сделать с MongoDB?

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Как насчет создания "is" массива, отсортированного по дате, и тогда запрос будет выглядеть примерно так:

`{$and : [ {_id : "4ee9b..." }, 
           {is[0].date: {$gt : now-5min }}, 
           {is[0]._id : "4ee21.." }]}`

Вы не получите результатов, если элемент "4ee9b .." не самый новый и ему менее 5 минут.

1 голос
/ 15 декабря 2011

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

0 голосов
/ 15 декабря 2011

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

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