Mongodb 使用多个条件更新嵌套文档
我需要更新Mongodb 使用多个条件更新嵌套文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我需要更新角色:“admin”,条件匹配时,如id:1,Location的数组名称:“foo”和Location嵌套数组的“UserAccess.loginName:“paklon”,然后更新角色。以下查询应该可以工作: { id: 1, name: "venkat", description: "Description", address: "chennai", pinCode: "600100", authenticationCode: "12
角色:“admin”
,条件匹配时,如id:1
,Location
的数组名称:“foo”
和Location
嵌套数组的“UserAccess.loginName:“paklon”
,然后更新角色。以下查询应该可以工作:
{
id: 1,
name: "venkat",
description: "Description",
address: "chennai",
pinCode: "600100",
authenticationCode: "123",
authenticated: false,
deleted: false,
Location: [
{
name: "foo",
description: "LocationDecription",
parent: "parent",
UserAccess: [
{
loginName: "paklon",
role: "role"
}
]
}
]
}
要更新数组中的特定元素,需要使用“$”作为第一个元素的占位符。因此,它可以替换为“0”,并且由于它允许在查询中只使用一次“$”,因此在任何情况下,您都必须在查询结束时使用“0”
另外,请根据上述描述查看相应的mongodb,作为解决方案,请尝试在mongodb shell中执行以下更新操作
db.collection.update(
{"id": 1, "Location.name": "foo", "Location.UserAccess.loginName": "paklon"},
{$set: {"Location.0.UserAccess.0.role": "admin"}}
)
就我所知,你能告诉我0的意义吗$set@PrashantPokhriyal它与“$”相同,用于指定要更新的数组元素。在后台“$”转换为“0”查看类似的工作感谢,但有一些更改:“Location.$.UserAccess.0.role”:“admin”
db.collection.update({
"id": 1,
"Location": {
$elemMatch: {
"name": "foo",
"UserAccess": {
$elemMatch: {
"loginName": "paklon"
}
}
}
}
}, {
$set: {
"Location.$.UserAccess.0.role": "admin"
}
})