如何在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}))