MongoDB - 如何判断每个文档在聚合匹配后是否有完全匹配的元素数组
MongoDB - How to tell if every document has an exactly matching element array after an aggregate match
我有 collection 个与此类似的文档:
{
Name : "Name1",
Product : 1012,
Titles : [ {
Id: 5,
Title: "FirstTitle"
},
{
Id: 75,
Title: "SecondTitle"
}
},
{
Name : "Name1",
Product : 2014,
Titles : [ {
Id: 5,
Title: "FirstTitle"
},
{
Id: 75,
Title: "SecondTitle"
}
}
我通过名称与聚合进行匹配,以获取具有相同名称的所有文档。然后,如果所有匹配项都具有完全相同的一组标题,我想要那组。
{
Name : "Name1,
TitlesVaries : false
Titles : [ {
Id: 5,
Title: "FirstTitle"
},
{
Id: 75,
Title: "SecondTitle"
}
}
如果它们不同,我想知道。
{
Name : "Name1"
TitlesVaries : true
Titles : null
}
我无法比较每个文档的 set/array 标题,看看它们是否完全相同,因为我没有 aggregate/match。一些文档可以有 empty/null 个标题数组,如果它们都是 empty/null,那就是匹配
聚合可能是
$addToSet
有助于删除重复项。所以我们将有两个数组,一个集合(Titles
)和一个原始数组('original')
- 比较两个数组。如果两者不相等,则有一个 various.
剧本是
db.collection.aggregate([
{
$group: {
_id: "$Name",
Titles: { $addToSet: "$Titles" },
original: { $push: "$Titles" }
}
},
{
$project: {
Titles: {
$cond: [
{
$or: [
{
$ne: [
{ $size: "$Titles" },
{ $size: "$original" }
]
},
{
$eq: [ { $size: "$original" }, 1 ]
}
]
},
"$Titles",
null
]
},
TitlesVaries: {
$ne: [
{ $size: "$Titles" }, { $size: "$original" }
]
}
}
}
])
我有 collection 个与此类似的文档:
{
Name : "Name1",
Product : 1012,
Titles : [ {
Id: 5,
Title: "FirstTitle"
},
{
Id: 75,
Title: "SecondTitle"
}
},
{
Name : "Name1",
Product : 2014,
Titles : [ {
Id: 5,
Title: "FirstTitle"
},
{
Id: 75,
Title: "SecondTitle"
}
}
我通过名称与聚合进行匹配,以获取具有相同名称的所有文档。然后,如果所有匹配项都具有完全相同的一组标题,我想要那组。
{
Name : "Name1,
TitlesVaries : false
Titles : [ {
Id: 5,
Title: "FirstTitle"
},
{
Id: 75,
Title: "SecondTitle"
}
}
如果它们不同,我想知道。
{
Name : "Name1"
TitlesVaries : true
Titles : null
}
我无法比较每个文档的 set/array 标题,看看它们是否完全相同,因为我没有 aggregate/match。一些文档可以有 empty/null 个标题数组,如果它们都是 empty/null,那就是匹配
聚合可能是
$addToSet
有助于删除重复项。所以我们将有两个数组,一个集合(Titles
)和一个原始数组('original')- 比较两个数组。如果两者不相等,则有一个 various.
剧本是
db.collection.aggregate([
{
$group: {
_id: "$Name",
Titles: { $addToSet: "$Titles" },
original: { $push: "$Titles" }
}
},
{
$project: {
Titles: {
$cond: [
{
$or: [
{
$ne: [
{ $size: "$Titles" },
{ $size: "$original" }
]
},
{
$eq: [ { $size: "$original" }, 1 ]
}
]
},
"$Titles",
null
]
},
TitlesVaries: {
$ne: [
{ $size: "$Titles" }, { $size: "$original" }
]
}
}
}
])