我需要返回带有MongoDB聚合的字符串数组。我做了以下工作:
db.users.aggregate([{$group: {_id:"$emails.address"}}])
它返回:
{ "_id" : [ "a@a.com" ] }
{ "_id" : [ "b@a.com" ] }
{ "_id" : [ "c@a.com" ] }
有没有方法返回这样的字符串数组:
["a@a.com","b@a.com","c@a.com"]
非常感谢任何花时间帮助我的人。
编辑
添加数据:
{
"_id" : "ukn9MLo3hRYEpCCty",
"createdAt" : ISODate("2015-10-24T03:52:11.960Z"),
"emails" : [
{
"address" : "a@a.com",
"verified" : false
}
]
}
{
"_id" : "5SXRXraariyhRQACe",
"createdAt" : ISODate("2015-10-24T03:52:12.093Z"),
"emails" : [
{
"address" : "b@a.com",
"verified" : false
}
]
}
{
"_id" : "WMHWxeymY4ATWLXjz",
"createdAt" : ISODate("2015-10-24T03:52:12.237Z"),
"emails" : [
{
"address" : "c@a.com",
"verified" : false
}
]
}
最佳答案
无论您做什么,并且不能更改,.aggregate()
方法始终返回。
出于您的目的,您最好使用Objects
代替,它只返回一个不同值的数组:
db.users.distinct("emails.address");
这正是您想要的输出:
["a@a.com","b@a.com","c@a.com"]
如果您真的想使用
.distinct()
,那么在后期处理中,只需要在表达式的“外部”发生值的转换。在处理这样的数组时,还应该使用.aggregate()
。您可以使用javascript进行此操作,例如:
db.users.aggregate([
{ "$unwind": "$emails" },
{ "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })
这提供了相同的输出,但转换客户端(而不是服务器端)执行的是
$unwind
。