我是 Python 和 MongoDB 的菜鸟,非常感谢您对我的问题的帮助。我在 MongoDB 中的集合如下所示:
{
"Segments" : [
{
Devices : [
"IP" : "",
"Interfaces" :
[
{
"Name" :""
}
],
],
"DeviceName" : "",
"SegmentName" : ""
}
]
}
我有一个像这样的对象:
Node Details: {'node:98a': ['Sweden', 'Stockholm', '98a-3470'], 'node:98b': ['Denmark', 'Copenhagen', '98b-3471', '98b-3472']}
我需要使用节点详细信息字典中的值更新上述集合中“接口”部分中的“名称”。我尝试过使用 $set、$addToSet、$push 等,但没有任何帮助。我已经添加了 Segment 和 DeviceName 信息。
输出应如下所示:
{
"Segments" : [
{
Devices : [
{
"Interfaces" :
[
{
"Name" :"98a-3470"
}
],
"DeviceName" : "node:98a",
}
{
"Interfaces" :
[
{
"Name" :"98b-3471"
},
{
"Name" :"98b-3472"
}
],
"DeviceName" : "node:98b",
}
],
"SegmentName" : "segmentA"
}
]
}
任何帮助将不胜感激。我在 MongoDB shell 和 Google 上尝试了很多,但无济于事。谢谢你们。
问候, 骗子
[[ EDITED ]] 好的,这是我在提出问题后继续闲逛后所得到的:我在 MongoDB shell 中使用了以下查询:
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98a'}, {$set: {"Segments.$.Devices.0.Interfaces.Name" : "98b-3470"}})
现在根据我的“模式”将其插入正确的位置,但是当我尝试添加第二个接口时,它只是替换了之前的接口。我尝试使用 $push (抱怨它不是一个数组)和 $addToSet (显示另一个错误),但没有任何帮助。从现在开始你能帮我吗?
谢谢,骗子
[[再次编辑]]
我找到了解决方案!这是我所做的:向现有设备添加接口:
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98a'}, {$addToSet: {"Segments.$.Devices.0.Interfaces.Name" : "98a-3471"}})
现在,用数组“接口”中的新“名称”附加到字典:
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98a'}, {$addToSet: {"Segments.$.Devices.0.Interfaces" : {"Name" : "98a-3472"}}})
如您所见,我使用了 $addToSet。
现在,下一步是将相同的信息(具有不同的值)添加到第二台设备,如下所示:
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98b'}, {$addToSet: {"Segments.$.Devices.1.Interfaces" : {"Name" : "98b-3473"}}})
就是这样!我对自己很满意!感谢所有花时间阅读我的问题的人。我希望我的解决方案对某人有所帮助。
问候, 骗子