【问题标题】:Comparing ObjectIDs in Mongoose Query比较 Mongoose 查询中的 ObjectID
【发布时间】:2015-03-01 01:14:46
【问题描述】:

我正在尝试更新扩展 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);

【问题讨论】:

    标签: node.js mongodb sorting mongoose objectid


    【解决方案1】:

    发现错误。

    在 Mongoose 查询中,我按“id”而不是“_id”排序

    【讨论】:

      【解决方案2】:

      如果您阅读 MongoDB 文档,您会发现它取决于创建项目的过程http://docs.mongodb.org/manual/reference/glossary/#term-objectid,因此,为了保证您需要什么,您需要在记录中添加一个日期戳并使用它而不是 _id

      【讨论】:

      • 谢谢!实际上我们已经在数据库中有一个时间戳。但是时间戳不会在 MongoDB 中自动建立索引。但是,_id 会根据创建时间自动编入索引。
      猜你喜欢
      • 1970-01-01
      • 2016-06-13
      • 2013-02-06
      • 2015-03-31
      • 2014-07-01
      • 1970-01-01
      • 2015-03-13
      • 2019-11-24
      • 1970-01-01
      相关资源
      最近更新 更多