Javascript 来自匹配项的MongoDB聚合链
我的目标是排除已经从MongoDb中以前的匹配聚合中匹配的记录 在第一场比赛中,我需要从两个国家取得记录:美国和德国 在第二场比赛中,我需要排除来自给定国家的记录,例如美国和Begginer水平,但保留来自美国和德国的其他记录。这怎么可能? 示例数据:Javascript 来自匹配项的MongoDB聚合链,javascript,database,mongodb,aggregate,aggregation,Javascript,Database,Mongodb,Aggregate,Aggregation,我的目标是排除已经从MongoDb中以前的匹配聚合中匹配的记录 在第一场比赛中,我需要从两个国家取得记录:美国和德国 在第二场比赛中,我需要排除来自给定国家的记录,例如美国和Begginer水平,但保留来自美国和德国的其他记录。这怎么可能? 示例数据: [ { country: 'United States', personName: 'John', level: 'Average', }, { country: 'United States',
[
{
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' } },
]
}
我不想在第二个比赛阶段再次添加countries数组。您将需要一个美元左右,以便保存所有非“美国”的记录:
db.stuff.aggregate[
{$match:{
国家:{$in:['美国','德国]}
}
},
{$match:{
$or:[
{国家:{$ne:'美国},
{国家:{$eq:'美国'},级别:{$ne:'乞丐'}
]
}
}
];
然后,您可以将两个匹配项合并为一个
db.stuff.aggregate[
{$match:{
国家:{$in:['美国','德国]},
$or:[
{国家:{$ne:'美国},
{国家:{$eq:'美国'},级别:{$ne:'乞丐'}
]
}
}
];
这两个查询都将输出:
{
"_id" : ObjectId("5e999bdee125b211df7f361a"),
"country" : "United States",
"personName" : "John",
"level" : "Average"
}
{
"_id" : ObjectId("5e999bdee125b211df7f361c"),
"country" : "Germany",
"personName" : "John",
"level" : "Average"
}
那会把我在曼联的其他记录删除States@IntoTheDeep对不起是点击快乐,以上我们将完全为您的场景现在,如果我有100个其他国家?这正是我想要避免的不确定我是否明白你的意思?如果你有100个国家想要匹配,你就必须全部通过?我的目标是做一系列的匹配,在这些匹配中,每一次下一次的匹配都会排除上一次的记录。不要在单个匹配中执行int。