MongoDb以键值为轴心
我是MongoDB的新蜜蜂,我有一个包含键值对的集合,如下所示。。 我期待的结果集 如果不在聚合管道中硬编码“A”、“B”、“C”,如何获得它。我的键值对将变得更大,并且对于给定的id是可变的 如果不在聚合管道中硬编码“A”、“B”、“C”,如何获得它。我的键值对将变得更大,并且对于给定的id是可变的 您可以使用新的聚合运算符MongoDb以键值为轴心,mongodb,pivot,aggregation-framework,Mongodb,Pivot,Aggregation Framework,我是MongoDB的新蜜蜂,我有一个包含键值对的集合,如下所示。。 我期待的结果集 如果不在聚合管道中硬编码“A”、“B”、“C”,如何获得它。我的键值对将变得更大,并且对于给定的id是可变的 如果不在聚合管道中硬编码“A”、“B”、“C”,如何获得它。我的键值对将变得更大,并且对于给定的id是可变的 您可以使用新的聚合运算符$arrayToObject()来透视MongoDB键。该操作符目前在MongoDB v3.4.4中可用+ 例如,您可以重新构造架构: { "restauranti
$arrayToObject
()来透视MongoDB键。该操作符目前在MongoDB v3.4.4中可用+
例如,您可以重新构造架构:
{
"restaurantid" : NumberInt("1"),
"Properties" : [
{ "k" : "A", "v" : NumberInt("25") },
{ "k" : "B", "v" : "StringValue" },
{ "k" : "C", "v" : ISODate("2017-02-09") }
]
}
然后,您可以使用以下示例:
另见和。根据您的用例,您还可以利用MongoDB灵活模式并重新考虑您的文档模型
{ "restaurantid" : NumberInt("1"),
"A" : NumberInt("25"),
"B" : "StringValue",
"C" : ISODate("2017-02-09")
}
{
"restaurantid" : NumberInt("1"),
"Properties" : [
{ "k" : "A", "v" : NumberInt("25") },
{ "k" : "B", "v" : "StringValue" },
{ "k" : "C", "v" : ISODate("2017-02-09") }
]
}
db.collection.aggregate(
[
{$project:{"tmp":{$arrayToObject:"$Properties"}, "restaurantid":"$resturantid"}},
{$addFields:{"tmp.restaurantid":"$restaurantid"}},
{$replaceRoot:{newRoot:"$tmp"}}
]);