MongoDB Node.js每个方法
我有一个数据数组,我将存储在数据库中。当我查看数据是否已经存在时,each()将被调用两次,即使在使用limit(1)时也是如此。我不知道这里发生了什么MongoDB Node.js每个方法,node.js,mongodb,limit,each,Node.js,Mongodb,Limit,Each,我有一个数据数组,我将存储在数据库中。当我查看数据是否已经存在时,each()将被调用两次,即使在使用limit(1)时也是如此。我不知道这里发生了什么 collection.find({ month: 'april' }).limit(1).count(function(err, result){ console.log('counter', result); }); collection.find({ month: 'april' }).limit(1).each(
collection.find({
month: 'april'
}).limit(1).count(function(err, result){
console.log('counter', result);
});
collection.find({
month: 'april'
}).limit(1).each(function(err, result){
console.log('each', result);
});
collection.find({
month: 'april'
}).limit(1).toArray(function(err, result){
console.log('toArray', result);
});
此时,集合中已存储了确切的1个4月份数据集。
上述查询将生成如下输出:
count 1
each {...}
each null
toArray {...}
在mongo shell中,我检查了count()和forEach()方法。一切正常。这是司机的问题吗?我做错什么了吗?这是预期的行为。驱动程序返回循环中的项目,然后在结束时返回
null
,表示没有剩余的项目。您也可以在驾驶员侧看到这一点:
如果您对详细信息感兴趣,您可以检查每个:
if(this.items.length > 0) {
// Trampoline all the entries
while(fn = loop(self, callback)) fn(self, callback);
// Call each again
self.each(callback);
} else {
self.nextObject(function(err, item) {
if(err) {
self.state = Cursor.CLOSED;
return callback(utils.toError(err), item);
}
>> if(item == null) return callback(null, null); <<
callback(null, item);
self.each(callback);
})
}
if(this.items.length>0){
//所有参赛作品都要蹦床
而(fn=loop(self,callback))fn(self,callback);
//再打一次
self.each(回调);
}否则{
self.nextObject(函数(错误,项){
如果(错误){
self.state=Cursor.CLOSED;
返回回调(utils.toError(err),项);
}
>>if(item==null)返回回调(null,null);您能否console.log
每次迭代中的err
变量只是为了查看第二次通过的是什么?但是,当this.items.length==0时,为什么需要检查nextObject?这应该暗示item==null,不是吗?扩展了我的答案。只有当结果包含大量文档时才有意义。以防万一关于limit(1)
很容易看出没有更多的项了。但是每个
都必须是一致的,这就是为什么它总是在最后一项之后返回null
。好的,我现在明白了,谢谢。我想each()不是检查文档是否已经存在的正确函数,对吗?这就是为什么findOne()的原因存在?在检查null的情况下,我将得到错误的结果,因为如果该集合中还没有匹配的文档,它将返回null;如果文档存在并且集合已结束,它将返回null。each()
用于迭代find()返回的项
。当您希望查询返回更多文档时,它非常有用。如果您只想检查文档是否存在,那么使用findOne()
是最简单的方法。如果项目不存在,它将返回null
。您可以使用如下代码:collection.findOne({},function(err,item){If(!err&&item!=null){//exists}}
if(this.items.length > 0) {
// Trampoline all the entries
while(fn = loop(self, callback)) fn(self, callback);
// Call each again
self.each(callback);
} else {
self.nextObject(function(err, item) {
if(err) {
self.state = Cursor.CLOSED;
return callback(utils.toError(err), item);
}
>> if(item == null) return callback(null, null); <<
callback(null, item);
self.each(callback);
})
}