MongoDB怪异行为需要解释

时间:2019-05-30 19:29:26

标签: javascript mongodb

因此,昨天我开始在Node中搞乱MongoDB,在检索数据时,我遇到了一个奇怪的做法。 您可以通过调用从嵌套在数据库中的集合中检索数据。

data = client.db([dbname]).collection([collectionname]).find([searchcriteria])

至少在typeof看来,这返回的似乎是一个对象

然后,示例代码使用以下行将其记录到控制台:

function iterate(x){ 
    console.log(x)
}
data.forEach(iterate)

在这种情况下,输出是预期的,到目前为止,两个对象有2对,一切都很好。

我认为拥有迭代功能是不必要的,因此我将其更改为

console.log(data)

期望数组中有2个对象,或者嵌套在另一个对象中,但是我得到的是这个巨大的对象,里面有各种各样的东西除了我们之前看到的两个对象

现在就我的问题以及我需要更深入的解释:

为什么我可以在此对象上实际使用.forEach(),而不能在其他对象上重新创建。

第二件事是为什么console.log(data)会给我所有通过.forEach()调用时被隐藏的输出?

还有其他方法可以在一两行代码中快速从Mongo中检索数据吗?

这似乎不是一种非常有用的处理方式。 以及.forEach()在对象上的工作方式是如何工作的,我在这里在堆栈上找到了一篇文章,但这不是很详细,也不是很容易理解。

1 个答案:

答案 0 :(得分:1)

CustomException函数返回一个游标-这是您看到的巨大对象。有关更多详细信息,请参见结帐文档:https://stackoverflow.com/a/56371923/5299483

之所以可以在返回的对象(=光标)上调用find是因为它是它的方法之一。参见https://docs.mongodb.com/manual/reference/method/db.collection.find/#db.collection.find

这里是所有游标方法的概述:https://docs.mongodb.com/manual/reference/method/cursor.forEach/#cursor.forEach

要获取您要查找的数据数组,您需要使用forEach方法,如下所示:

toArray