Как поместить sh значение поля в другое поле массива того же do c в обновлении MongoDB - PullRequest
1 голос
/ 16 апреля 2020

У меня есть один объект mongodb, как показано ниже:

{
    "_id" : ObjectId("5e54934b2dfddc1826223bbb"),
    "sellProducts" : {
        "products" : []
    },
    "sellServices" : {
        "services" : []
    },
    "categories" : [],
    "status" : "Published",
    "tags" : [],
    "dateRange" : [],
    "membershipRequired" : false,
    "usersAttending" : [],
    "cities" : [],
    "companies" : [ 
        ObjectId("5db1c84ec10c45224c4b95fd"),
    ],
    "companyId" : ObjectId("5db1c84ec10c45224c4b95fd"),
    "jobProfile" : [ 
        ObjectId("5e549339a3ad20c97b7b0c7d")
    ],
    "fundingBy" : []
}

Теперь я хочу обновить ту же запись, вставив значение поля companyId в массив компаний . Как я могу это сделать?

Я пробовал запрос ниже, но он не работал:

db.getCollection('posts').update({_id: ObjectId("5e54934b2dfddc1826223bbb")},
    {
        $push: 
            {
                companies: "$$companyId"
            }
    })

1 Ответ

2 голосов
/ 17 апреля 2020

Поскольку вы используете MongoDB версии 4.2, где вы можете запустить конвейер агрегации в обновлениях, попробуйте выполнить следующий запрос:

/** As `$push` doesn't work in aggregation as update operator
 * You can use `$addFields` or `$set` to re-create 'companies' field by merging 'companies' array with array converted 'companyId' field
 * which would leave 'companies' as an array with existing elements + companyId */

db.getCollection('posts').updateOne({_id: ObjectId("5e54934b2dfddc1826223bbb")},
         [{$addFields : {companies: {$concatArrays: ['$companies',['$companyId']]}}}])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...