当我使用 .append 时,MongoDB 每隔 2 次插入一次空值



我收到一个错误,当我第一次运行此代码时,它 100% 正常工作,但之后每隔 2 次它就会表现得很奇怪。出于某种原因,值"warnings"变得null而不是[{"warning": "Text1", "time": datetime.datetime(2018, 8, 10, 20, 2, 22, 103589)}, {"warning": "Text2", "time": datetime.datetime(2018, 8, 10, 20, 2, 50, 815495)}]我正在使用pymongo和MongoDB atlas。 这是我的代码:

result = db.memberscol.find_one({"guild": ctx.guild.id, "user": user.id})
if result is None or result["warnings"] is None or len(result["warnings"]) == 0:
warnings = [{"warning": warning, "time": datetime.datetime.utcnow()}]
else:
warnings = result["warnings"].append({"warning": warning, "time": datetime.datetime.utcnow()})
db.memberscol.replace_one({"guild": ctx.guild.id, "user": user.id}, {"guild": ctx.guild.id, "user": user.id, "warnings": warnings}, 
True)

如果有人能帮助我解决这个问题,我将不胜感激。谢谢。

您不需要赋值运算符,因为追加返回 None。这就是为什么当您分配追加结果时,warnings在 else 语句中变为 null 的原因。 你可以这样做:

result = db.memberscol.find_one({"guild": ctx.guild.id, "user": user.id})
if result is None or result["warnings"] is None or len(result["warnings"]) == 0:
warnings = [{"warning": warning, "time": datetime.datetime.utcnow()}]
else:
warnings = [{"warning": warning, "time": datetime.datetime.utcnow()}]
result["warnings"].append({"warning": warning, "time": datetime.datetime.utcnow()})
db.memberscol.replace_one({"guild": ctx.guild.id, "user": user.id}, {"guild": ctx.guild.id, "user": user.id, "warnings": warnings},
True)

或附加到您的warnings

虽然,同样的事情在JavaScript中也可以工作。

最新更新