Javascript 来自匹配项的MongoDB聚合链

Javascript 来自匹配项的MongoDB聚合链,javascript,database,mongodb,aggregate,aggregation,Javascript,Database,Mongodb,Aggregate,Aggregation,我的目标是排除已经从MongoDb中以前的匹配聚合中匹配的记录 在第一场比赛中,我需要从两个国家取得记录:美国和德国 在第二场比赛中,我需要排除来自给定国家的记录,例如美国和Begginer水平,但保留来自美国和德国的其他记录。这怎么可能? 示例数据: [ { country: 'United States', personName: 'John', level: 'Average', }, { country: 'United States',

我的目标是排除已经从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' } },
  ]
}
我不想在第二个比赛阶段再次添加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。