переменные не установлены в оболочке монго

Я пытаюсь работать с оболочкой монго, и у меня возникают проблемы с сохранением значения внутри оболочки монго.

когда я нахожу пользователя в документе users, я сохраняю его в переменной doc

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

Когда я набираю doc в оболочке mongo, я вижу объект json

> doc
{ "_id" : ObjectId("57325aaa48d9231b11e5cb81"), "username" : "anil", "email" : "[email protected]" }

Однако, когда я снова набираю doc, я ничего не вижу. его нет.. что я делаю не так?

> doc
>

Это может быть что-то простое, но я не понимаю. Может ли кто-нибудь указать, что я делаю неправильно?


person user641887    schedule 11.05.2016    source источник


Ответы (3)


когда вы открываете оболочку mongo, она пытается найти сервер mongod и по умолчанию подключается к тесту. когда вы назначаете некоторую переменную в оболочке mongo какому-либо документу в mongod, он фактически извлекает документ из базы данных, чтобы снова получить тот же результат, вам нужно снова подключиться к базе данных (это означает, что вам нужно ввести var doc = db.users. найти({"имя пользователя":"анил"}); еще раз). В отличие от сценария, в котором вы определяете var doc = 4 в оболочке, а ввод doc каждый раз возвращает 4.

Если вы хотите остановить передачу в начале и выполнить некоторую обработку, вам нужно добавить нуль после него, например

var doc = db.users.find({"username":"anil"});null; // делаем свою работу над документом

an ex.

введите здесь описание изображения

person amitava    schedule 11.05.2016
comment
поэтому в этом случае, когда я делаю var doc = db.users.find({username:anil});null; doc['username']=xyz и введите doc . будет ли значение имени пользователя, которое было заменено h, на xyz? но когда я пытаюсь это сделать, это не работает. - person user641887; 12.05.2016
comment
пожалуйста, смотрите мои добавленные комментарии выше. - person amitava; 12.05.2016
comment
Я думаю, я неправильно истолковал ваше требование. если вы хотите обновить исходную таблицу в mongod обновленным документом, вам нужно добавить еще один шаг. Я обновил свое предыдущее приложение. Пожалуйста, не стесняйтесь, дайте мне знать, если это не ваше требование. - person amitava; 12.05.2016
comment
также, пожалуйста, следуйте точным шагам, которые я упомянул. кажется, вы пропустили шаг---- в то время как (doc.hasNext()) doc1 = doc.next();----- затем отредактируйте doc1 НЕ doc. вы ничего не получите, если попытаетесь отредактировать документ так, как вы показали. - person amitava; 12.05.2016
comment
user641887, пожалуйста, переключите принятый ответ с этого непонятного на правильный ответ @styvane ниже - person foobarbecue; 14.07.2019

Это связано с тем, что find возвращает cursor, и вы можете использовать все значение только один раз. Здесь, поскольку вы фильтруете свой документ на основе значения _id, в курсоре возврата у вас есть только один документ, который используется в первый раз. Если вам нужно повторять результат много раз, вам нужно будет вернуть массив, содержащий все документы из курсора, используя toArray, но в вашем случае вам нужно findOne

person styvane    schedule 11.05.2016

Еще одним вариантом может быть использование функции next() курсора find(). Это даст значение первой записи в переменной, и оно сохранится. Затем с переменной можно выполнить любую требуемую операцию.

person Apurva Kunkulol    schedule 10.03.2020