Пытаюсь проверить, существует ли документ с полями, и если да, отредактируйте его в pymongo

#python #pymongo

Вопрос:

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

 First I created a entry by running this a few times:
import pymongo 
client = pymongo.MongoClient()
mydb = client["mydb"]
data = {'name': "john"}
mycol = mydb['something']

mycol.insert_one(data)
 

Который работает так, как я хочу.

Теперь мне нужно проверить, существует ли запись, где name = «john» .

Я следовал этому руководству, которое в основном просто показывает этот фрагмент:

 db.student.find({name:{$exists:true}})
 

Я попытался реализовать это, так что теперь это выглядит так:

 import pymongo
from pymongo import cursor 
client = pymongo.MongoClient()
mydb = client["mydb"]

print(mydb.something.find({"name":{"john"}}))
 

и это просто возвращает <pymongo.cursor.Cursor object at 0x7fbf266239a0>
с чем я действительно не знаю, что делать.

Я также рассмотрел здесь некоторые похожие вопросы и нашел несколько предложений для чего-то подобного:

 print(mydb.values.find({"name" : "john"}).limit(1).explain())
 

Но это просто дает мне длинную строку, похожую на json, которая, кстати, не изменится, если я добавлю другие вещи для «john».

Итак, как мне проверить, существует ли документ, в котором «name» = «john»? и, возможно, также отредактируйте документ?

Редактировать

Теперь я попробовал следующее решение:

 import pymongo
from pymongo import cursor 
client = pymongo.MongoClient()
mydb = client["mydb"]
mycol = mydb['something']
name = "john"
print(mycol.find_one({name:{"$exists":True}}))
 

Но он только выводит меня None

Ответ №1:

Измените find() на find_one() , или, если вы ожидаете более одного результата, повторите курсор, используя цикл for:

 print(db.student.find_one({'name':{'$exists': True}}))
 

или

 for student in db.student.find({'name': {'$exists': True}}):
    print(student)
 

Комментарии:

1. Я видел этот пример в нескольких местах, но для меня он имеет очень мало смысла. Что такое $exist и true . моя среда разработки понятия не имеет

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