繁体   English   中英

如何将 object 插入 Mongodb 中的 object

[英]How to insert an object to an object in Mongodb

所以我一直在寻找 2 周来找到这个问题的答案,但似乎不可能或者我不知道。 例如,如您所知,在 JSON 中,您可以执行以下操作(提到流媒体部分,您可以将任意数量的对象添加到另一个 object。):

data = {
    "name": "amirreza",
    "age": 24,
    "streamers": {
        "mine": False, "snipe": True
    }
} 

在此之前,我尝试使用 $set,但它没有按我的意愿工作,它只是替换了列表中的最后一个 object:

list = ["test1", "test2", "test3", "test4"]
for i in list:
    s = status.find_one({"_id": 1})
    s2 = s["streamers"]
    if i in s2:
        print("y")
    elif not i in s2:
        status.update_one({"_id": 1}, {"$set": {"streamers": {i: False}}})

现在我想要的是

data = {
    "name": "amirreza",
    "age": 24,
    "streamers": {
        "test1": False, "test2": False, "test3": False, "test4": False
    }
} 

但它给出了这个:

data = {
    "name": "amirreza",
    "age": 24,
    "streamers": {
        "test4": False
    }
} 

status.update_one({"_id": 1}, {"$set": {"streamers": {i: False}}})不应该在循环中。 通过循环s2您正在为每次迭代更新s2 ,因此为了可视化,第一次迭代将s2设置为"streamers": { "test1": False} ,第二次将s2设置为"streamers": { "test2": False} ,并且依此类推...,直到您到达列表的末尾,并且最后一次迭代将s2设置为"streamers": { "test4": False} ,您会得到该结果,因为这就是 $set 运算符的工作方式,它会更新整个object。

您已接近解决方案。 您应该通过循环s2来简单地构造一个 object,最后,在您完成 object 之后,您将退出 for 循环,您调用status.update_one({"_id": 1}, {"$set": {"streamers": YOUR_OBJECT}}) 这样您就可以更新所有流媒体的status ,而不是单独更新每个流媒体。

暂无
暂无

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

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