未在mongo shell中设置的变量

use*_*887 7 mongodb mongo-shell mongodb-query

我正在尝试使用mongo shell,我在mongo shell中存储值时遇到了挑战

当我在文档用户中找到用户时,我将其存储在变量doc中

> var doc = db.users.find({"username":"anil"});
Run Code Online (Sandbox Code Playgroud)

当我在mongo shell中输入doc时,我看到了json对象

> doc
{ "_id" : ObjectId("57325aaa48d9231b11e5cb81"), "username" : "anil", "email" : "mongodb@gmail.com" }
Run Code Online (Sandbox Code Playgroud)

但是,当我再次输入doc时,我什么也看不见.它走了..我在这里做错了什么?

> doc
>
Run Code Online (Sandbox Code Playgroud)

它可能很简单,但我没有得到它.有人可以指出我做错了什么吗?

sty*_*ane 6

这是因为find返回游标,并且您只能消耗一次所有值。在这里,因为您基于_id值过滤文档,所以在返回光标中,只有一个文档是您第一次使用的。如果您需要多次迭代结果,则需要使用来返回一个包含游标中所有文档的数组 toArray,但是在这种情况下,您需要findOne


ami*_*ava 4

当您打开 mongo shell 时,它会尝试查找 mongod 服务器并默认连接到测试。当您将 mongo shell 中的某个变量分配给 mongod 中的某个文档时,它实际上从数据库中获取文档,要再次获得相同的结果,您需要再次连接到数据库(意味着您需要输入 var doc = db.users.再次查找({“用户名”:“anil”});)。与在 shell 中定义 var doc = 4 且每次键入 doc 都会返回 4 的情况不同。

如果你想在开始时停止传输并进行一些处理,那么你需要在后面添加null,例如

var doc = db.users.find({"用户名":"anil"});null; // 在 doc 上完成你的工作

前任。

在此输入图像描述