如何在mongoDB聚合中设置密钥?

如何在mongoDB聚合中设置密钥?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我们的想法是从这样一个文档集合出发: { "_id" : ObjectId("58ff4fa372ac97344d5672c2"), "direction" : 1, "post" : ObjectId("58ff4ea572ac97344d5672c1"), "user" : ObjectId("586b84239ae9590ab66bd3ad") } { "_id" : ObjectId("58ff4c9f2952d7341d4afc0c"),

我们的想法是从这样一个文档集合出发:

{ 
    "_id" : ObjectId("58ff4fa372ac97344d5672c2"), 
    "direction" : 1,
    "post" : ObjectId("58ff4ea572ac97344d5672c1"), 
    "user" : ObjectId("586b84239ae9590ab66bd3ad")
}
{ 
    "_id" : ObjectId("58ff4c9f2952d7341d4afc0c"), 
    "direction" : -1, 
    "post" : ObjectId("58fc15a3fb3bed0fd54bfd95"), 
    "user" : ObjectId("586b84239ae9590ab66bd3ad")
}
为此:

[
    //post: direction
    "58ff4ea572ac97344d5672c1": 1,
    "58fc15a3fb3bed0fd54bfd95": -1
]
在MongoDB聚合文档中,我似乎找不到任何允许您使用另一个字段的值设置密钥名称的内容

我希望这段代码能工作,但我明白为什么不能。它认为“$post”是指MongoDB表达式

db.votes.aggregate([
    {$group: {
        _id: null,
        entries: {
            $addToSet: {
                "$post": "$direction"
            }
        }
    }}
])

MongoDB 3.4具有
$objectToArray
$arrayToObject
,可有效用于将“值”转换为“键”。但是,无法将非字符串值“强制转换”到基于字符串的键中。和基于字符串的键是BSON约束。这里唯一“字符串化”的是客户机代码。我建议这就是实际操作的地方,因为您实际上并没有要求“聚合”任何内容。因此,事实上,您需要为您的结果做的就是
db.vots.find().map(d=>({[d.post]:d.direction}))