私は 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']}
上記のコレクションの「Interfaces」部分内の「Name」を、Node Details ディクショナリの値で更新する必要があります。$set、$addToSet、$push などを使用してみましたが、何も役に立ちません。セグメントとデバイス名の情報は既に追加しています。
出力は次のようになります。
{
"Segments" : [
{
Devices : [
{
"Interfaces" :
[
{
"Name" :"98a-3470"
}
],
"DeviceName" : "node:98a",
}
{
"Interfaces" :
[
{
"Name" :"98b-3471"
},
{
"Name" :"98b-3472"
}
],
"DeviceName" : "node:98b",
}
],
"SegmentName" : "segmentA"
}
]
}
どんな助けでも大歓迎です。MongoDB シェルと Google でいろいろ試しましたが、うまくいきませんでした。皆さん、ありがとうございました。
よろしく、トラプスター
[[ 編集済み ]] さて、質問を投げかけた後、いろいろ調べてみた結果、これまでに得たものは次のとおりです。MongoDB シェルで次のクエリを使用しました。
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98a'}, {$set: {"Segments.$.Devices.0.Interfaces.Name" : "98b-3470"}})
これは私の「スキーマ」に従って正しい場所に挿入されましたが、2 番目のインターフェイスを追加しようとすると、以前のインターフェイスが置き換えられてしまいます。$push (配列ではないことを訴えた) と $addToSet (別のエラーが表示された) を使用してみましたが、何も役に立ちませんでした。この時点から私を助けてもらえますか?
ありがとう、トラプスター
[[再編集]]
解決策を見つけました!これが私がやったことです: 既存のデバイスにインターフェースを追加するには:
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98a'}, {$addToSet: {"Segments.$.Devices.0.Interfaces.Name" : "98a-3471"}})
ここで、配列「Interfaces」内の新しい「Name」で dict に追加します。
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98a'}, {$addToSet: {"Segments.$.Devices.0.Interfaces" : {"Name" : "98a-3472"}}})
ご覧のとおり、$addToSet を使用しました。
さて、次のステップは、同じ情報 (異なる値を持つ) を 2 番目のデバイスに追加することでした。これは次のように行われました。
db.test.mycoll.update({'Segments.SegmentName':'segmentA','Segments.Devices.Name':'node:98b'}, {$addToSet: {"Segments.$.Devices.1.Interfaces" : {"Name" : "98b-3473"}}})
以上でした!私は自分自身にとても夢中です!私の問題を読んでくれてありがとう。私の解決策が誰かに役立つことを願っています。
よろしく、トラプスター