当我使用.append时,MongoDB每第二次插入null

时间:2018-08-10 20:07:05

标签: python python-3.x mongodb pymongo

我在第一次运行此代码时遇到错误,它可以100%正确地运行,但是此后每第二次运行就很奇怪。由于某种原因,值“ 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地图集。 这是我的代码:

                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)

如果有人可以帮助我,我将非常感激。谢谢。

1 个答案:

答案 0 :(得分:0)

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

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中使用。