【问题标题】:performing distinct on multiple fields in mongodb在 mongodb 的多个字段上执行不同的操作
【发布时间】:2017-04-03 03:29:20
【问题描述】:

假设我们有如下文档集合:

[
{
"name" : "john",
"age" : 23,
"city": "New York",
"gender": "M"
},
{
"name" : "doe",
"age" : 30,
"city": "dubai",
"gender": "M"
},
{
"name" : "jean",
"age" : 23,
"city": "New York",
"gender": "F"
}
{
"name" : "phil",
"age" : 24,
"city": "Ohio",
"gender": "M"
}
]

预期输出:

{
"name" : ["john","doe","jean","phil"],
"age" : [23,30,24],
"city": ["New York","Dubai","Ohio"],
"gender": ["M","F"]
}

我尝试使用 mongodb 的 distinct ,但这只会返回一个特定字段的唯一值...我认为我们不能在不同的查询中传递多个字段...

【问题讨论】:

  • 你想要任何序列中所有键的唯一值吗?

标签: mongodb mongoose database


【解决方案1】:

$addToSet 专门用于此类事情。

db.coll.aggregate([
{$group: {
    _id: null,
    name: {$addToSet: '$name'},
    age: {$addToSet: '$age'},
    city: {$addToSet: '$city'},
    gender: {$addToSet: '$gender'}
    }}
])

给出输出 -

{ "_id" : null, "name" : [ "phil", "jean", "doe", "john" ], "age" : [ 24, 30, 23 ], "city" : [ "Ohio", "dubai", "New York" ], "gender" : [ "F", "M" ] }

【讨论】:

  • 太棒了!请注意_id 必须包含在$group 中。关于 SO 的唯一答案之一,有一个很好的例子。
  • 如果我也想获取 _id 怎么办??
  • 如何在 Spring Boot 中为 _id 为 null 编写相同的代码,我写在下面的代码但它给出了错误 - 任何建议请给我 Aggregation agg = Aggregation.newAggregation(Map.class,Aggregation.group( "?").addToSet("name").as("name").addToSet("details").as("details")); AggregationResults aggregate = template.aggregate(agg, "products", Map.class);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多