【问题标题】:Mongo aggregate query to get common resultMongo聚合查询以获得共同的结果
【发布时间】:2020-11-27 01:18:47
【问题描述】:

我有以下文档的 MongoDB 集合:

db.inventory.insertMany([
   { "_id" : 1,"uid":"b123","name" : "test","lang" : "ja-jp"},
   { "_id" : 2,"uid":"b123","name" : "test","lang" : "en-us"},
   { "_id" : 3,"uid":"b123","name" : "demo","lang" : "ja-jp"},
   { "_id" : 4,"uid":"b123","name" : "demo","lang" : "en-us"},
   { "_id" : 5,"uid":"b456","name" : "test","lang" : "en-us"},
   { "_id" : 6,"uid":"b456","name" : "demo","lang" : "en-us"}
])

并希望得到以下回应

[{uid:"b123"}]

如何使用 Mongo 聚合查询获得结果,或者还有其他选择吗?

【问题讨论】:

  • 您的 and 与您给定的文档示例相矛盾。
  • 算了,我希望回复为 [{uid:"b123"}] 那么我怎样才能得到呢?
  • 您可以使用这些Logical Query Operators 来获得您的结果。您可以在集合上使用findaggregate 方法之一来执行查询。
  • 没有得到你有任何示例吗?
  • 您是要获取第一个uid,即出现在最多文档中的那个,还是其他?您想使用什么标准来确定“b123”是要返回的那个?

标签: mongodb


【解决方案1】:

我不确定我是否理解了这个问题,但您可以执行以下几项操作来返回 uid 字段:

  1. 使用查找和项目:
db.inventory.find({
  uid: 'b123'
}).project({
  uid: $uid
});

这将产生{uid: 'b123'} 的列表。 如果您只想要唯一的结果,您可以使用 $group 的聚合,如下所示:

db.inventory.aggregate([
  {
    $match: {
      uid: 'b123'
    }
  },
  {
    $group: {
      _id: {
        uid: '$uid'
      }
    }
  },
  {
    $group: {
      _id: 1,
      result: {
        $addToSet: '$_id'
      }
    }
  }
]);

请注意,第二个$group 的目的是将它们全部收集到一个数组中。
响应将是这样的:

{
  _id: 1,
  result: [
    {uid: 'b123'}
  ]
}

希望这能回答你的问题

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多