如何在 MONGODB 的嵌套文档数组中提取文档
Posted
技术标签:
【中文标题】如何在 MONGODB 的嵌套文档数组中提取文档【英文标题】:How to $pull documents in nested array of documents in MONGODB 【发布时间】:2018-06-03 02:20:18 【问题描述】:如何从 parentHierarchy 中 userId = "fadd66e5-97b9-4ae0-86ca-7922bf9d1da4" 且 organizationId = "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de" 的文档中删除数据。
这是文档。
[
"name": "ABC",
"organization": [
"organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
"parentHierarchy": [
"privelege": "Admin",
"userId": "fadd66e5-97b9-4ae0-86ca-7922bf9d1da4"
,
"privelege": "Manager",
"userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
]
,
"organizationId": "d44a90c1-3f04-4dbd-97f0-cd1be3baf2de",
"parentHierarchy": [
"privelege": "Admin",
"userId": "fada66e5-97b9-4ae0-86ca-7922bf9d1da4"
,
"privelege": "Manager",
"userId": "fndd56e5-97b9-4ae0-86ca-7922bf9d1da4"
]
]
,
"name": "PQR",
"organization": [
"organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
"parentHierarchy": [
"privelege": "Admin",
"userId": "fadd66e5-97b9-4ae0-86ca-7922bf9d1da4"
,
"privelege": "Manager",
"userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
]
]
]
输出文档应该采用这种格式(在这个组织ID“d44a90c0-3f04-4dbd-97f0-cd1be3baf2de”中没有父级)。
[
"name": "ABC",
"organization": [
"organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
"parentHierarchy": [
"privelege": "Manager",
"userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
]
,
"organizationId": "d44a90c1-3f04-4dbd-97f0-cd1be3baf2de",
"parentHierarchy": [
"privelege": "Admin",
"userId": "fada66e5-97b9-4ae0-86ca-7922bf9d1da4"
,
"privelege": "Manager",
"userId": "fndd56e5-97b9-4ae0-86ca-7922bf9d1da4"
]
]
,
"name": "PQR",
"organization": [
"organizationId": "d44a90c0-3f04-4dbd-97f0-cd1be3baf2de",
"parentHierarchy": [
"privelege": "Manager",
"userId": "fadd56e5-97b9-4ae0-86ca-7922bf9d1da4"
]
]
]
我使用过这样的查询,但没有返回正确的数据。
var condition = "organization.organizationId":condition.orgId,
"organization.parentHierarchy.userId": userdata[0]._id
var update =
"$pull":"organization":
"organizationId": condition.orgId,
"parentHierarchy":"userId": userdata[0]._id
db.collection('users').update(condition, update, multi: true,
function(error, documents)
if(error)
console.log("error in to update parentHierarchy");
else
console.log("updated Documents");
)
【问题讨论】:
【参考方案1】:Pull 运算符通过应用查询来工作,因为它是***文档,因此当条件找到文档时,它会删除 organization
embedded 数组中的文档。
您必须使用位置运算符来删除 parentHierarchy
嵌入数组中的文档。
查询条件定位organization
元素后跟$pull
以删除parentHierarchy
文档数组中与用户ID 匹配的所有文档。
var condition="organization.organizationId":condition.orgId
var update="organization.$.parentHierarchy":"userId": userdata[0]._id
【讨论】:
我试过你告诉条件和更新的。但相应的所有数据都变空了(意味着数据已经完全删除)。 您是否在尝试相同的数据集?您可以添加显示您的查询的编辑吗?我已经验证了对所提供数据的查询。以上是关于如何在 MONGODB 的嵌套文档数组中提取文档的主要内容,如果未能解决你的问题,请参考以下文章