当前位置: 首页 > 知识库问答 >
问题:

mongo组查询如何保留字段

祝英博
2023-03-14

每个人。在mongo组查询中,结果仅显示参数中的键。如何像mysql查询组一样保留每个组中的第一个文档。例如:

-------------------------------------------------------------------------
|  name  | age  |  sex  | province |   city   |   area   |   address     |
-------------------------------------------------------------------------
| ddl1st | 22   | 纯爷们 |  BeiJing |  BeiJing | ChaoYang | QingNianLu    |
| ddl1st | 24   | 纯爷们 |  BeiJing |  BeiJing | XuHui    | ZhaoJiaBangLu |
|  24k   | 220  | ...   |  ....    |  ...     | ...      | ...           |
-------------------------------------------------------------------------



db.users.group({key: { name: 1},reduce: function ( curr, result ) { result.count ++ },initial: {count : 0 } })

结果:

[
{
    "name" : "ddl1st",
    "count" : 1
},
{
    "name" : "24k",
    "count" : 1
}
]

如何获取以下内容:

[
   {
   "name" : "ddl1st",
   "age" : 22,
   "sex" : "纯爷们",
   "province" : "BeiJing",
   "city" : "BeiJing",
   "area" : "ChaoYang",
   "address" : "QingNianLu",
   "count" : 1
   },
   {
   "name" : "24k",
   "age" : 220,
   "sex" : "...",
   "province" : "...",
   "city" : "...",
   "area" : "...",
   "address" : "...",
   "count" : 1
}
]

共有3个答案

姜泳
2023-03-14

顺便说一下,如果您不仅想保留第一个文档,还可以使用$addToSet,例如:

db.test.aggregate({
  $group: {
    _id: '$name',
    name : { $addToSet: '$name' }
    age : { $addToSet: '$age' },
    count: { $sum: 1 }
  }
}
董庆
2023-03-14

[已编辑以包含评论建议]

我来这里寻找答案,但对选择的答案不满意(特别是考虑到它的年龄)。我发现这个答案是更好的解决方案(改编):

db.test.aggregate({
  $group: {
    _id: '$name',
   person: { "$first": "$$ROOT" },
   count: { $sum: 1 }
  },
  {
    "$replaceRoot": { "newRoot": { "$mergeObjects": ["$person", { count: "$count" }]} }
  }
}
傅经业
2023-03-14

如果要保留有关每个组的第一个匹配条目的信息,可以尝试聚合,如下所示:

    db.test.aggregate([{
      $group: {
         _id : '$name',
         name : { $first: '$name' },
         age : { $first: '$age' },
         sex : { $first: '$sex' },
         province : { $first: '$province' },
         city : { $first: '$city' },
         area : { $first: '$area' },
         address : { $first: '$address' },
         count : { $sum: 1 },
      }
    }]);
 类似资料:
  • 有人遇到过聚合管道的问题吗?特别是使用Mongo API?我有一个包含几个阶段的大型查询,$group阶段无法在前一个$project阶段的输出中找到特定的字段,尽管如果我注释掉$group阶段,我肯定可以看到我希望作为$project一部分输出的字段。 下面设置了两个集合,每个集合都有一个文档用于演示目的。 以下是聚合管道查询: 我在使用MongoDB时得到以下结果: null

  • 给定集合"foo",我们有字段"bar",看起来像这样: 如何查询字段“bar”上满足以下条件的所有“foo”:[14,18]中的“uid”=2和“mid”

  • 问题内容: 我有一个标准POJO,其中包含一组属性。POJO已被注释为,以便作为文档保留在MongoDB中。 我如何(注释?)可以忽略/避免POJO中的属性之一被保留? 问题答案: 该注释是。参见http://static.springsource.org/spring- data/data-document/docs/current/reference/html/#mapping-usage-

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢

  • 我是spring数据Mongo的新手,所以我肯定做错了什么,因为我无法执行这样一个简单的查询。这是我的模型: 我想从一个品牌获得所有的模型,所以我实现DAO如下: 如果我在shell中执行这个mongodb查询,它就会工作: 但是,Java应用程序抛出以下异常: 很明显,它在Brand类中查找一个字段$id,但由于它不存在,它失败了。因此,我将查询更改为以下内容,以便它导航到id字段: 现在,它没

  • 我有如下要求。 从UI获取place子句作为字符串,任何选项都可以在Spring Boot中的place子句中添加字符串以查询mongo DB 例如:(eventType以“asdf”和age开头 在sql中,我们可以添加where子句,但不确定如何在mongoDB的springboot中做到这一点 注意:字符串是动态的,没有特定的模式。括号可以嵌套。Spring防尘套前端角度和维修 提前感谢