繁体   English   中英

pymongo db.collection.find().count 每次返回 1

[英]pymongo db.collection.find().count returns everytime 1

我正在制作一个在运行命令后创建数据库集合的机器人。 创造出来的价值是这样的:查看图片

所以它需要服务器 id、服务器名称和一堆数据。 我正在尝试创建一个命令来验证许可证是否对运行该命令的服务器有效:

@client.command()
async def license(ctx):
server_name = ctx.guild
server_id = ctx.guild.id
a = mycol.find({},{'ServerID':str(server_id)})
check = mycol.find({},{'ServerID':str(server_id)}).count()
if check < 1:
    print("License Not found!")
elif daysToExpire.days < 0:
    print("License Expired!")
elif daysToExpire.days <= 7:
    print("License is going to expire soon!")
else:
    print("License is valid!") 

check var 获取 ServerID 并计算它在数据库中找到它的次数,如果它 < 1 则表示服务器不在数据库中,因此未授权,问题出在该行。 在我运行此命令的任何服务器中,它都会找到与其他服务器相同的许可证,在每台服务器中,它都会显示相同的许可证信息、email、到期等。如果我尝试在另一台服务器上激活新许可证,它会说许可证已经处于活动状态,这都是因为mycol.find({},{'ServerID':str(server_id)}).count()每次返回 1,即使我正在运行命令的服务器的 ServerID,不在数据库中。 否则,如果数据库中没有任何值,则在每个服务器中返回 0。

您的find()参数传递不正确; 过滤器在第一个参数中,所以它应该是:

check = mycol.find({'ServerID':str(server_id)}).count()

或者,更有效地:

check = db.mycollection.count_documents({'ServerID':str(server_id)})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM