Я пытаюсь обновить поле массива во встроенном документе в mongodb с помощью Spring Data MongoDB.
Структура документа, который я хочу обновить / вставить в коллекцию mongodb, приведена ниже.
Подобных документов может быть больше для каждого типа отдела, например «Продажи», «Маркетинг» и так далее.
{
"timestamp": "2014-09-26T04:00:00.000Z",
"department": "accounts",
"employee": [
{
"type": "regular",
"names": [
"Raj",
"Kumar",
"Shankar"
]
},
{
"type": "contract",
"names": [
"Penny",
"Sheldon",
"bob"
]
},
{
"type": "temp",
"names": [
"jerry",
"kramer",
"bubbleboy"
]
}
]
}
В принципе, у меня есть запрос на обновление, как показано ниже,
db.getCollection('mytest').update(
{
"timestamp" : "2014-09-26T04:00:00.000Z",
"department" : "accounts",
"employee.type" : "regular"
},
{ $addToSet: { "employee.$.names" : "Jo" } },
{
upsert: true
}
)
Я добавил upsert: true, потому что, если нет документа, соответствующего запросу, я хочу вставить документ в коллекцию mytest.
Когда я выполняю то же самое из оболочки mongo, я получаю следующую ошибку.
The positional operator did not find the match needed from the query. Unexpanded update: employee.$.names
Даже если это сработает, я не уверен, есть ли у нас аналогичная поддержка для реализации того же в Spring Data mongodb.
Кроме того, мой другой запрос: если я хочу добавить / обновить сотрудников для нескольких отделов, скажем, «учетные записи», а также «продажи», мне кажется, что я должен выполнить один и тот же запрос с разными значениями, соответствующими количеству отделов, которое я хочу. обновить (если нет вставки) соответственно.
Есть ли лучший и эффективный вариант, такой как массовая / пакетная обработка, где я могу обновлять / вставлять сотрудников для нескольких отделов одновременно в одном запросе обновления mongo. Кроме того, есть ли поддержка в Spring data mongodb / mongotemplate для того же самого.