Как обновить / вставить в коллекцию mongodb результат совокупного запроса в другой коллекции - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть приведенный ниже агрегатный запрос, и я хотел вставить / обновить этот результат в другую коллекцию.

db.coll1.aggregate([
    {
        $group: 
        {
            _id: "$collId",
            name: {$first:"$name"} ,
            type: {$first:"$Type"}  ,
            startDate: {$first:"$startDate"} ,
            endDate: {$first:"$endDate"} 
        }
    }
    ])

У меня есть другая коллекция coll2, в которой есть поля в вышеуказанном запросе и некоторые дополнительные поля.Возможно, у меня уже есть документ, созданный в Coll2, соответствующий _id: collId в приведенном выше запросе.Если этот идентификатор совпадает, я хочу обновить документ значениями поля результата и сохранить значения других полей в документе.Если идентификатор не существует, он должен просто создать новый документ в Coll2.

Есть ли способ сделать это в запросе MongoDB.Я хочу реализовать это в моем приложении Spring.

1 Ответ

0 голосов
/ 19 сентября 2019

Мы можем использовать $ merge , чтобы сделать это.Поддерживается из Mongo v4.2

db.collection.aggregate([
    {
        $group:{
            "_id":"$collId",
            "name": {
                $first:"$name"
            },
            "type":{
                $first:"$Type"
            },
            "startDate":{
                $first:"$startDate"
            },
            "endDate":{
                $first:"$endDate"
            } 
        }
    },
    {
        $merge:{
            "into":"collection2",
            "on":"_id",
            "whenMatched":"replace",
            "whenNotMatched":"insert"
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...