如何在MongoDB中从具有多级对象数组的集合中获取数据



几天后我刚刚开始使用MongoDB,这是我的收藏:

{
PlayerUid:1
ListData:
[
{
Id:100
ListInfo:[
{
Uid:1,
content:"Those I don't care"
},
{
Uid:2,
content:"Those I don't care"
},
{
Uid:3,
content:"Those I don't care"
},
{
Uid:4,
content:"Those I don't care"
}
]
},
{
Id:101
ListInfo:[
{
Uid:5,
content:"Which I wanted"
},
{
Uid:6,
content:"Those I don't care"
},
{
Uid:7,
content:"Those I don't care"
},
{
Uid:8,
content:"Those I don't care"
}
]
}
]
},
{
PlayerUid:2
ListData:
[
{
Id:100
ListInfo:[
{
Uid:9,
content:"Those I don't care"
},
{
Uid:10,
content:"Those I don't care"
},
{
Uid:11,
content:"Those I don't care"
},
{
Uid:12,
content:"Those I don't care"
}
]
},
{
Id:101
ListInfo:[
{
Uid:13,
content:"Those I don't care"
},
{
Uid:14,
content:"Those I don't care"
},
{
Uid:15,
content:"Those I don't care"
},
{
Uid:16,
content:"Those I don't care"
}
]
}
]
}

我想获得条件为PlayerUid=1,Id:101,Uid=5的数据。

我试过

findOne({ PlayerUid: 1}, { ListData: { $elemMatch: { Id: 101 } } })

我得到了

{
ListData: [ { Id: 101, ListInfo: [Array] } ]
}

然后我就被卡住了,我不知道如何获取或过滤ListInfo中的数据。我所期望的是

{
Uid:5,
content:"Which I wanted"
}
or
{
PlayerUid:1
ListData:
[
{
Id:100
ListInfo:
[
{
Uid:5,
content:"Which I wanted"
}
]
}
]
}

这可能吗?

Ps:这是我的第一篇帖子,对不起我在这里做错了什么。

好的,我已经将存储构造函数更改为类似的键值

{
'1':
{
'100':
{
'9':{
Uid:9,
content:"Those I don't care"
},
'10':{
Uid:10,
content:"Those I don't care"
}
}
'200':{
'11':{
Uid:11,
content:"Those I don't care"
},
'12':{
Uid:12,
content:"That I wanted"
}
}
},
'2':
{
'100':
{
'13':{
Uid:13,
content:"Those I don't care"
},
'14':{
Uid:14,
content:"Those I don't care"
}
}
'200':{
'15':{
Uid:15,
content:"Those I don't care"
},
'16':{
Uid:16,
content:"That I wanted"
}
}
}
}

一切都很顺利。

最新更新