比较 Mongoose 查询中的 ObjectID
Comparing ObjectIDs in Mongoose Query
我正在尝试更新扩展的 Mongo 数据库中的每个文档。
我的计划是从最年轻、最近创建的文档开始,然后从那里开始,一个接一个地查询下一个最旧的文档。
问题是我的 Mongoose 查询跳过了在同一秒内创建的文档。我认为 than/less 比运算符更能处理在同一秒内生成的 _id。但是尽管现在数据库中有 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);
如果您阅读 MongoDB 文档,您会发现它取决于创建项目的过程 http://docs.mongodb.org/manual/reference/glossary/#term-objectid,因此,为了保证您的需要,您需要添加一个记录的日期戳并使用它代替 _id
发现错误。
在 Mongoose 查询中,我按 "id" 而不是“_id”排序
我正在尝试更新扩展的 Mongo 数据库中的每个文档。
我的计划是从最年轻、最近创建的文档开始,然后从那里开始,一个接一个地查询下一个最旧的文档。
问题是我的 Mongoose 查询跳过了在同一秒内创建的文档。我认为 than/less 比运算符更能处理在同一秒内生成的 _id。但是尽管现在数据库中有 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);
如果您阅读 MongoDB 文档,您会发现它取决于创建项目的过程 http://docs.mongodb.org/manual/reference/glossary/#term-objectid,因此,为了保证您的需要,您需要添加一个记录的日期戳并使用它代替 _id
发现错误。
在 Mongoose 查询中,我按 "id" 而不是“_id”排序