我如何检查“_id”字段的值是否存在以及如何根据它读取、写入、更新和删除数据
How can i check if the value for "_id" field exists and how to read, write, update and delete data based on it
我有一个用于处理用户注释的 discord 机器人。所以机器人基本上将字符串作为注释存储在数据库中的列表中。注释是特定于用户的。我尝试将 ctx.author.id
设置为“_id”字段的值,然后检查使用该命令的人的用户 ID 是否等于数据库中任何文档中“_id”的值。但是没用。
这是我的命令代码:
@client.command()
async def makenotes(ctx, *, args):
try:
if (len(db.NoteBoyNotes.find_one({'_id':ctx.author.id})) == 0):
NotesUpdateDict = {'_id':ctx.author.id, 'notes':[]}
NotesUpdateDict['notes'].append(args)
NBNotes.update(NotesUpdateDict)
x = notesCol.insert_one(NBNotes)
await ctx.send("Ok, Noted")
else:
pass
except:
await ctx.send("Some error occurred")
有人可以帮忙吗?另一件事,我使用 motor
作为 asyncio
,而不是 pymongo
。
编辑: 这是错误:
enter image description here
试试这个:
@client.command()
async def makenotes(ctx, *, args):
try:
check = awaut db.NoteBoyNotes.find_one({'_id':ctx.author.id})
if (len(check) == 0):
NotesUpdateDict = {'_id':ctx.author.id, 'notes':[]}
NotesUpdateDict['notes'].append(args)
NBNotes.update(NotesUpdateDict)
x = notesCol.insert_one(NBNotes)
await ctx.send("Ok, Noted")
else:
pass
except:
await ctx.send("Some error occurred")
您需要 await db.NoteBoyNotes.find_one
以便获得返回值而不是未来值。
此外,我相信找到一个 Returns 单个文档,或者 None 如果找不到匹配的文档。所以你检查检查是否是 None 而不是 len().
此答案来自@kpie 发表的评论,
@client.command()
async def makenotes(ctx, *, args):
try:
check = await db.NoteBoyNotes.find_one({'_id':ctx.author.id})
if (check is None):
NotesUpdateDict = {'_id':ctx.author.id, 'notes':[]}
NotesUpdateDict['notes'].append(args)
NBNotes.update(NotesUpdateDict)
x = notesCol.insert_one(NBNotes)
await ctx.send("Ok, Noted")
else:
pass
except:
await ctx.send("Some error occurred")```
我有一个用于处理用户注释的 discord 机器人。所以机器人基本上将字符串作为注释存储在数据库中的列表中。注释是特定于用户的。我尝试将 ctx.author.id
设置为“_id”字段的值,然后检查使用该命令的人的用户 ID 是否等于数据库中任何文档中“_id”的值。但是没用。
这是我的命令代码:
@client.command()
async def makenotes(ctx, *, args):
try:
if (len(db.NoteBoyNotes.find_one({'_id':ctx.author.id})) == 0):
NotesUpdateDict = {'_id':ctx.author.id, 'notes':[]}
NotesUpdateDict['notes'].append(args)
NBNotes.update(NotesUpdateDict)
x = notesCol.insert_one(NBNotes)
await ctx.send("Ok, Noted")
else:
pass
except:
await ctx.send("Some error occurred")
有人可以帮忙吗?另一件事,我使用 motor
作为 asyncio
,而不是 pymongo
。
编辑: 这是错误: enter image description here
试试这个:
@client.command()
async def makenotes(ctx, *, args):
try:
check = awaut db.NoteBoyNotes.find_one({'_id':ctx.author.id})
if (len(check) == 0):
NotesUpdateDict = {'_id':ctx.author.id, 'notes':[]}
NotesUpdateDict['notes'].append(args)
NBNotes.update(NotesUpdateDict)
x = notesCol.insert_one(NBNotes)
await ctx.send("Ok, Noted")
else:
pass
except:
await ctx.send("Some error occurred")
您需要 await db.NoteBoyNotes.find_one
以便获得返回值而不是未来值。
此外,我相信找到一个 Returns 单个文档,或者 None 如果找不到匹配的文档。所以你检查检查是否是 None 而不是 len().
此答案来自@kpie 发表的评论,
@client.command()
async def makenotes(ctx, *, args):
try:
check = await db.NoteBoyNotes.find_one({'_id':ctx.author.id})
if (check is None):
NotesUpdateDict = {'_id':ctx.author.id, 'notes':[]}
NotesUpdateDict['notes'].append(args)
NBNotes.update(NotesUpdateDict)
x = notesCol.insert_one(NBNotes)
await ctx.send("Ok, Noted")
else:
pass
except:
await ctx.send("Some error occurred")```