因此,我一直在搜索2周以找到该问题的答案,但似乎不可能或我不知道。例如,您知道,在JSON中,您可以执行以下操作(提及拖缆部分,您可以在任意其他对象中添加任意数量的对象。):
data = {
"name": "amirreza",
"age": 24,
"streamers": {
"mine": False, "snipe": True
}
}
在此之前,我尝试使用$ set,但是它并不能按我的意愿工作,它只是替换了列表中的最后一个对象:
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运算符就是这样工作的,所以它将更新整个对象。
您已接近解决方案。您应该仅通过遍历来构造一个对象s2
,最后,在创建对象之后,您将退出for循环,然后调用status.update_one({"_id": 1}, {"$set": {"streamers": YOUR_OBJECT}})
。这样,您将status
使用所有拖缆进行更新,而不是分别使用每个拖缆进行更新。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句