我正在尝试使用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
>
它可能很简单,但我没有得到它。有人可以指出我做错了吗?
答案 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上做你的工作
前一个
答案 2 :(得分:0)
另一个选择可能是使用next()
光标的find()
功能。这将把第一个记录的值赋给该变量,并将保留。然后可以对变量执行任何必需的操作。