Обновить запрос в коллекции с помощью _id - PullRequest
1 голос
/ 13 апреля 2020
{
    "_id" : "tenant/data/EMAIL/ENGLISH",
    "tenantId" : "tenant2",
    "channelType" : "EMAIL",

    "template" : [ 
        {
            "_id" : "1",
            "templateName" : "abc",
            "effectiveStartDate" : ISODate("2017-01-01T12:00:00.000Z"),
            "modifiedDate" : ISODate("2017-06-02T22:08:55.782Z"),
            "active" : false
        }
    ]
}

Мне нужно обновить "templateName" : "xyz" на основе "_id" : "tenant/data/EMAIL/ENGLISH"

Я пробовал эти запросы, но безуспешно

db.getCollection('data').updateOne({"_id": "tenant/data/EMAIL/ENGLISH"},
                     {$set : { "template.$.templateName" : "XYZ"}}); 

db.getCollection('data').updateOne({"_id": "tenant/data/EMAIL/ENGLISH"},

                     {$set : { "template.templateName" : "XYZ"}}); 

Любая помощь будет оценена .

1 Ответ

0 голосов
/ 13 апреля 2020

Я использовал оператор positional-all для обновления массива.

Вот запрос:

db.sample.update(
  {
    "_id": "tenant/data/EMAIL/ENGLISH"
  },
  {
    $set:{
      "template.$[].templateName":"XYZ"
    }
  }
)

Вывод

{
        "_id" : "tenant/data/EMAIL/ENGLISH",
        "tenantId" : "tenant2",
        "channelType" : "EMAIL",
        "template" : [
                {
                        "_id" : "1",
                        "templateName" : "XYZ",
                        "effectiveStartDate" : ISODate("2017-01-01T12:00:00Z"),
                        "modifiedDate" : ISODate("2017-06-02T22:08:55.782Z"),
                        "active" : false
                }
        ]
}

надеюсь, это поможет:)

...