我正在尝试使用 Spring Data MongoDB 更新 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 shell 执行相同的操作时,我收到以下错误。
The positional operator did not find the match needed from the query. Unexpanded update: employee.$.names
即使这可行,我也不确定我们是否有类似的支持来在 Spring Data mongodb 中实现相同的功能。
另外,我的另一个查询是,如果我想为多个部门添加/更新员工,比如“帐户”和“销售”,看来我必须执行与我想要的部门数量不同的值的相同查询相应地更新(如果不存在插入)。
是否有更好更高效的选项,例如批量/批量,我可以在单个 mongo 更新查询中同时更新/插入多个部门的员工。此外,spring 数据 mongodb/mongotemplate 中是否有相同的支持。