未在mongo shell中设置的变量

时间:2016-05-11 20:55:04

标签: mongodb mongodb-query mongo-shell

我正在尝试使用mongo shell,我在mongo shell中存储值时面临挑战

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

> var doc = db.users.find({"username":"anil"});

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

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

然而,当我再次输入doc时,我什么也看不见。它消失了......我在这里做错了什么?

> doc
>

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

3 个答案:

答案 0 :(得分:3)

这是因为find返回cursor,您只能使用所有值一次。这是因为您根据_id值过滤了您的文档,在返回游标中您只有一个文档会在您第一次使用时消耗。如果您需要多次迭代结果,则需要使用toArray返回包含光标中所有文档的数组,但在您的情况下,您需要的是findOne

答案 1 :(得分:3)

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

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

var doc = db.users.find({“username”:“anil”}); null; //在doc上做你的工作

前一个

enter image description here

答案 2 :(得分:0)

另一个选择可能是使用next()光标的find()功能。这将把第一个记录的值赋给该变量,并将保留。然后可以对变量执行任何必需的操作。