[英]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.