【发布时间】:2020-02-04 08:41:49
【问题描述】:
如果我有一个具有这种结构的数据库
{
_id: int
P1: string
P2: [{
_id: int
C1: [int]
C2: int
C3: string
C4: string
C5: [{
D1: string
D2: {E1: string}
}]
C6: string
C7: false
}]
}
对于所有的P2对象,我们在C5中检查重复的D1值,只得到不重复的P2对象。
{_id:1, P1: "A", P2[{_id: 1, C1:[1], C2:1, C3:"X", C4:"B", C5[{D1:"123", D2:{E1: "331"}}], C6:"Ex", C7:true}]}
{_id:1, P1: "A", P2[{_id: 2, C1:[1], C2:1, C3:"Y", C4:"U", C5[{D1:"456", D2:{E1: "332"}}], C6:"Ea", C7:false}]}
{_id:2, P1: "Z", P2[{_id: 3, C1:[1], C2:2, C3:"I", C4:"O", C5[{D1:"789", D2:{E1: "333"}}], C6:"Eq", C7:false}]}
{_id:2, P1: "Z", P2[{_id: 4, C1:[1], C2:2, C3:"P", C4:"L", C5[{D1:"123", D2:{E1: "334"}}], C6:"Ee", C7:true}]}
因此,当构造如下DB结构时,我想要这个结果。
{_id:1, P1: "A", P2[{_id: 1, C1:[1], C2:1, C3:"X", C4:"B", C5[{D1:"123", D2:{E1: "331"}}], C6:"Ex", C7:true}]}
{_id:1, P1: "A", P2[{_id: 2, C1:[1], C2:1, C3:"Y", C4:"U", C5[{D1:"456", D2:{E1: "332"}}], C6:"Ea", C7:false}]}
{_id:2, P1: "Z", P2[{_id: 3, C1:[1], C2:2, C3:"I", C4:"O", C5[{D1:"789", D2:{E1: "333"}}], C6:"Eq", C7:false}]}
我搜索了distinct 和aggregate 函数,但没有得到想要的结果。
【问题讨论】:
-
那么对于每个
D1,您想要第一个P2对象吗? -
@tomslabbaert 我想获取除 P2 中所有对象的重复 D2 值之外的其余 P2 对象。
-
那么为什么不返回示例中的最后一个文档?它是一个不同的对象
{_id: 4, C1:[1], C2:2, C3:"P", C4:"L", C5[{D1:"123", D2:{E1: "334"}}], C6:"Ee", C7:true}] -
@tomslabbaert 我已经证明,因为 D1 值是重复的,所以它们被排除在结果之外。
-
因此,对于每个 D1,您都需要第一个 P2 对象,正如我在第一条评论中所说的那样