Javascript MongoDB-不一致的游标行为

Javascript MongoDB-不一致的游标行为,javascript,mongodb,shell,Javascript,Mongodb,Shell,有人能解释一下吗 [test] 2014-01-31 18:40:36.243 >>> var rowNEW = db.people.find( { "name" : "joe", "age" : 20} ); [test] 2014-01-31 18:40:42.853 >>> rowNEW.forEach(function() { print ('FOUND ROW'); } ); FOUND ROW [test] 2014

有人能解释一下吗

    [test] 2014-01-31 18:40:36.243 >>> var rowNEW = db.people.find( { "name" : "joe", "age" : 20} );
    [test] 2014-01-31 18:40:42.853 >>> rowNEW.forEach(function() { print ('FOUND ROW'); } );
    FOUND ROW
    [test] 2014-01-31 18:40:47.163 >>> rowNEW = db.people.find( { "name" : "joe", "age" : 20} );
    { "_id" : ObjectId("52ec316d1d21069b6061b554"), "name" : "joe", "age" : 20 }
    [test] 2014-01-31 18:40:55.73 >>> rowNEW.forEach(function() { print ('FOUND ROW'); } );
    [test] 2014-01-31 18:40:57.533 >>>
第一次打印出“找到的行”
第二次“找到的行”未打印出来
这对我来说是非常意外和奇怪的。

为什么会这样呢?

没有
var
左侧的
newRow
正在shell中进行评估。这是一个REPL,这就是为什么在下一行看到JSON。这也会将光标向前移动一步,因此当您下次尝试访问
newRow
时,光标位于结果的末尾


使用
var
来避免评估。

这与
var
位有关,但我现在完全忘记了什么,这是某种范围界定问题,我怀疑是这样的。但是如果我想重用同一个变量呢。我是否需要说
var row=db.foo.find()每次(即每次包括var)?反复说
var newRow=
没有什么错。Javascript或至少这个REPL不关心OK,谢谢。最后一件事:有没有办法将这样一个光标重置回它的起始位置,这是一个好的做法?不是在shell中。提出一个JIRA:)但除此之外,这通常在大多数驱动程序中实现。非常好,只要您接受您正在做的事情。@peter.petrov:要“重置”光标,您将再次执行查询。在处理结果集时,数据库游标仅在前进(“下一步”)方向上迭代。如果您想引用以前的结果,您必须将这些结果缓存在应用程序代码中,或者如果适合RAM,则可能将结果集复制到数组中。有关更多示例,请参阅:。