mongodb 多层嵌套数组更新时,如何把arrayFilter应用到筛选中
多层嵌套数组更新采用arrayFilter方式,但是不知道如何实现upsert的效果
例如有这么一组数据:
data=[['1','2','4'],['1','2','5'],['1','3','6'],
['0','3','7'],['0','3','8']]
我想拼接成如下形式作为数据字段的值:
{
'_id':a,
'data':
[
{
'_id':1,
'sub':[
{
'_id':2,
'sub2':[
{'_id':4},
{'_id':5}
]
},
{
'_id':3,
'sub2':[
{'_id':6}
]
}
]
},
{
'_id':0,
'sub':[
'_id':3,
'sub2':[
{'_id':7},
{'_id':8}
]
]
}
]
}
我的想法是遍历data,然后依次按层级添加,例如添加第一层的1和0的时候我用的是
db.test.update({'_id':a,'data._id':{$ne:data[0]}},{$push:{'data._id':data[0]}})
这样可以实现data第一层的1和0的upsert效果,但是当我尝试对第二层使用同样的手段时:
db.test.update({'_id':a,'data.$[a].sub._id':{$ne:data[1]}},{$push:{'data.$[a].sub':{'_id':data[1]}}},{'arrayFilters':[{'a._id':data[0]}]})
$[a]
似乎并不起作用,虽然sub数组中有'_id':2,但还是会添加一个,把 $[a]
修改为0以后,实现了我的效果。
如果按照获取索引后更新的办法,可想而知更新第三层级的时候过于繁杂,这个有什么解决办法吗?还是必须获取索引后更新?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论