#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 требуются ключи в кавычках и логические значения заглавными буквами. Я отредактировал свой ответ, чтобы исправить.