大家好,非常感谢你提前帮助。
我们正在尝试构建用户的分层树,在某些时候我们需要在双嵌套数组中推送一个元素。 想象一下以下结构:
User A (children -> User B and C)
User B (parent -> User A, children -> User C)
User C (parent -> User B)
在某些时候,我们需要将新用户作为用户C的兄弟,因此在用户B下。结构将是这样的:
User A (children -> User B, C and D)
User B (parent -> User A, children -> User C and D)
User C (parent -> User B)
User D (parent -> User B)
我们更新的唯一信息是我们必须将新用户置于其中的父级,因此我们知道用户B将成为用户C的父级。 我试图弄清楚它是如何在单个查询中进行的,但是带有$或两个$ elemMatch的查询不会起作用并抛出以下错误
位置操作员未找到查询所需的匹配项。 未更新的更新:帐户。$。儿童
这是我正在尝试的查询
db.users.update({
"$or": [{
"_id": "User B",
"accounts": {
"$elemMatch": {
"group": "GROUPID"
}
}
}, {
"accounts": {
"$elemMatch": {
"children._id": "USER B",
"group": "GROUPID"
}
}
}]
}, {
"$push": {
"accounts.$.children": [{
"_id": "USER D",
"permission": "write"
}]
}
}, {
multi: true
})
数据结构如下
{
_id: 'USER B',
accounts: [{
group: 'GROUP 1',
parent: 'User X',
children: [{
_id: 'User Y',
permission: 'write'
}]
}, {
group: 'GROUP 2',
parent: 'User A',
children: [{
_id: 'User C',
permission: 'write'
}]
}]
}
关键是他们可以拥有属于不同组的不同帐户,我只应该更新属于同一其他用户组的帐户(更新时也知道groupId)
如果我尝试在$或(任何一个)的条件中完全相同的查询,它按预期工作,但是在$内部或两个条件同时它在使用位置运算符时失败$
也许唯一的解决方案是在两个查询中进行,但我想知道它是否可能在一个,如果不是,为什么不。非常感谢你们。
埃里克。