在 mongodb 的多个字段上执行不同的操作
Posted
技术标签:
【中文标题】在 mongodb 的多个字段上执行不同的操作【英文标题】:performing distinct on multiple fields in 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 ,但这只会返回一个特定字段的唯一值...我认为我们不能在不同的查询中传递多个字段...
【问题讨论】:
你想要任何序列中所有键的唯一值吗? 【参考方案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以上是关于在 mongodb 的多个字段上执行不同的操作的主要内容,如果未能解决你的问题,请参考以下文章