обновить документы mon go на основе значения карты и удалить это значение - PullRequest
0 голосов
/ 18 февраля 2020

в настоящее время работаю в Go и у меня есть база данных mon go (подключена через gopkg.in/mgo.v2), поэтому сейчас у меня есть структура данных, похожая на:

{
    "_id" : "some_id_bson",
    "field1" : "value1",
    "field2" : {
      {
      "key1" : "v1",
      "key2" : "v2",
      "key3" : "v3",
      "key4" : "v4"
      }
    }
}

Итак, в основном, что мне нужно сделать (в качестве примера), это обновить в базе данных все записи, которые содержат key1 и удалить это из json, так что результат будет примерно таким: :

{
        "_id" : "some_id_bson",
        "field1" : "value1",
        "field2" : {
          {
          "key2" : "v2",
          "key3" : "v3",
          "key4" : "v4"
          }
        }
    }

Что я могу использовать для достижения этой цели? Я искал и не могу найти что-то ориентированное на карты (field2 это карта). Заранее спасибо

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Попробуйте использовать $exists и $unset:

query:= bson.M{"$exists":bson.M{"field2.key1":true}}
replace:=bson.M{"$unset":bson.M{"field2.key1":""}}
collection.UpdateAll(query,replace)

Это должно найти все документы, содержащие field2.key1, и удалите это.

1 голос
/ 18 февраля 2020

Похоже, вы спрашиваете, как удалить свойство из вложенного объекта в конкретном документе, который выглядит так, как будто на него нужно ответить: Как удалить свойство вложенного объекта из документа MongoDB?, из основного ответа:

Используйте $ unset , как показано ниже:

db.collectionName.update ({}, {"$ unset": {" values.727920 ":" "}}) РЕДАКТИРОВАТЬ Для обновления нескольких документов используйте параметры обновления, такие как:

db.collectionName.update ({}, {" $ unset ": {" values.727920 ":" " }}, {"multi": true})

...