【问题标题】:MongoDB Aggregation Query Self JoinMongoDB聚合查询自联接
【发布时间】:2019-09-26 03:49:30
【问题描述】:

我有这些数据:

[
  { "_id": 1,  "B": 1, "C": 1 },
  { "_id": 2,  "B": 1, "C": 1 },
  { "_id": 3,  "B": 1, "C": 2 },
  { "_id": 5,  "B": 2, "C": 1 },
  { "_id": 6,  "B": 2, "C": 1 },
  { "_id": 7,  "B": 2, "C": 3 },
  { "_id": 8,  "B": 3, "C": 1 },
  { "_id": 9,  "B": 3, "C": 1 },
  { "_id": 10, "B": 3, "C": 1 }
]

我想知道的:

我喜欢获取所有不存在值为 2 或 3 的“C”的不同“B”。

对于给定的数据,结果应该只有 3,因为对于其他“B”行存在“C”值为 2 或 3。

在 SQL 中,我会创建一个左外连接来获得它。

【问题讨论】:

    标签: mongodb aggregation


    【解决方案1】:

    下面的查询应该做

    db.getCollection('foo').distinct("B", {"C" : {$nin: [2, 3]}});
    

    【讨论】:

    • 这不是我想要的。您的查询过滤掉带有 C 2 和 3 的行,然后给我唯一的 B。
    【解决方案2】:

    我发现这个查询返回了正确的结果:

    db.mytest.distinct("B", {"B" : {$nin: db.mytest.distinct("B", {"C" : {$in: [2, 3]}})}});
    

    【讨论】:

      猜你喜欢
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多