MongoDB 来自比赛的聚合链
MongoDB aggregate chain from matches
我的目标是排除已经从 MongoDb 中的先前匹配聚合匹配的记录。
在第一场比赛中,我需要从两个国家/地区获取记录:美国和德国。
在第二场比赛中,我需要排除给定国家/地区的记录,例如美国和 "Begginer" 级别,但保留来自美国和德国的其他记录。这怎么可能?
示例数据:
[
{
country: 'United States',
personName: 'John',
level: 'Average',
},
{
country: 'United States',
personName: 'Rina',
level: 'Begginer',
},
{
country: 'Germany',
personName: 'John',
level: 'Average',
}
]
第一场比赛(正确):
{
country: {$in: ['United States', 'Germany']}
}
第二场比赛(错误):
{
$and: [
{ level: { $ne: 'Begginer'} },
{ country: { $eq: 'United States' } },
]
}
我不想在第二个匹配阶段再次添加国家/地区数组。
您需要 $or
以便保留所有非 'United States':
的记录
db.stuff.aggregate([
{ $match: {
country: {$in: ['United States', 'Germany'] }
}
},
{ $match: {
$or: [
{ country: { $ne: 'United States' } },
{ country: { $eq: 'United States' }, level: { $ne: 'Begginer'} }
]
}
}
]);
然后您可以将 2 场比赛合二为一。
db.stuff.aggregate([
{ $match: {
country: {$in: ['United States', 'Germany'] },
$or: [
{ country: { $ne: 'United States' } },
{ country: { $eq: 'United States' }, level: { $ne: 'Begginer'} }
]
}
}
]);
这两个查询都会输出:
{
"_id" : ObjectId("5e999bdee125b211df7f361a"),
"country" : "United States",
"personName" : "John",
"level" : "Average"
}
{
"_id" : ObjectId("5e999bdee125b211df7f361c"),
"country" : "Germany",
"personName" : "John",
"level" : "Average"
}
我的目标是排除已经从 MongoDb 中的先前匹配聚合匹配的记录。
在第一场比赛中,我需要从两个国家/地区获取记录:美国和德国。
在第二场比赛中,我需要排除给定国家/地区的记录,例如美国和 "Begginer" 级别,但保留来自美国和德国的其他记录。这怎么可能? 示例数据:
[
{
country: 'United States',
personName: 'John',
level: 'Average',
},
{
country: 'United States',
personName: 'Rina',
level: 'Begginer',
},
{
country: 'Germany',
personName: 'John',
level: 'Average',
}
]
第一场比赛(正确):
{
country: {$in: ['United States', 'Germany']}
}
第二场比赛(错误):
{
$and: [
{ level: { $ne: 'Begginer'} },
{ country: { $eq: 'United States' } },
]
}
我不想在第二个匹配阶段再次添加国家/地区数组。
您需要 $or
以便保留所有非 'United States':
db.stuff.aggregate([
{ $match: {
country: {$in: ['United States', 'Germany'] }
}
},
{ $match: {
$or: [
{ country: { $ne: 'United States' } },
{ country: { $eq: 'United States' }, level: { $ne: 'Begginer'} }
]
}
}
]);
然后您可以将 2 场比赛合二为一。
db.stuff.aggregate([
{ $match: {
country: {$in: ['United States', 'Germany'] },
$or: [
{ country: { $ne: 'United States' } },
{ country: { $eq: 'United States' }, level: { $ne: 'Begginer'} }
]
}
}
]);
这两个查询都会输出:
{
"_id" : ObjectId("5e999bdee125b211df7f361a"),
"country" : "United States",
"personName" : "John",
"level" : "Average"
}
{
"_id" : ObjectId("5e999bdee125b211df7f361c"),
"country" : "Germany",
"personName" : "John",
"level" : "Average"
}