Сравнение идентификаторов объектов в запросе Mongoose

Я пытаюсь обновить каждый документ в расширяющейся базе данных Mongo.

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

Проблема в том, что мой запрос Mongoose пропускает документы, созданные за одну секунду. Я думал, что операторы больше чем / меньше будут работать с _ids, сгенерированными за одну секунду. Но хотя сейчас в базе данных 150 документов, эта функция переходит от самого молодого к самому старому документу всего за 8 циклов.

Вот мой запрос Mongoose в рекурсивном цикле узлов:

function loopThroughDatabase(i, doc, sizeOfDatabase){    
   if (i < sizeOfDatabase) {    
        (function(){
            myMongooseCollection.model(false)
                .find()
                .where("_id")
                .lt(doc._id)
                .sort("id")
                .limit(1)
                .exec(function(err, docs) {
                    if (err) {
                        console.log(err);
                    }
                    else {                      
                        updateDocAndSaveToDatabase(docs[0]);     
                        loopThroughDatabase(i + 1, docs[0], sizeOfDatabase); //recursion here    
                    }
                });            
         })();
    }
}

loopThroughDatabase(1, youngestDoc, sizeOfDatabase);

person April Rabkin    schedule 02.01.2015    source источник


Ответы (2)


Обнаружена ошибка.

В запросе Mongoose я выполнял сортировку по «id», а не «_id»

person April Rabkin    schedule 02.01.2015

Если вы прочитаете документацию MongoDB, вы увидите, что это зависит от процесса, в котором был создан элемент http://docs.mongodb.org/manual/reference/glossary/#term-objectid, поэтому, чтобы гарантировать то, что вам нужно, вам нужно добавить отметку даты в записи и использовать ее вместо _id

person unobf    schedule 02.01.2015
comment
Спасибо! На самом деле у нас уже есть временная метка в базе данных. Но временные метки не индексируются автоматически в MongoDB. Однако _id автоматически индексируется в зависимости от времени создания. - person April Rabkin; 31.03.2015