我在一个使用mongoDB的项目中面临优化问题。我有一个具有以下结构的集合(ID是伪造的,以提高可读性(:
收藏"变量":
{ "_id": ObjectId("001"), "customer": ObjectId("100"), "variable": "a", "value": "2" }
{ "_id": ObjectId("002"), "customer": ObjectId("100"), "variable": "b", "value": "7" }
{ "_id": ObjectId("003"), "customer": ObjectId("100"), "variable": "c", "value": "1" }
{ "_id": ObjectId("004"), "customer": ObjectId("200"), "variable": "a", "value": "5" }
{ "_id": ObjectId("005"), "customer": ObjectId("200"), "variable": "a", "value": "3" }
每当我想知道客户的所有变量和值时,我都会查询。。。
{ "customer": ObjectId("100") }
检索适当的变量:
{ "_id": ObjectId("001"), "customer": ObjectId("100"), "variable": "a", "value": "2" }
{ "_id": ObjectId("002"), "customer": ObjectId("100"), "variable": "b", "value": "7" }
{ "_id": ObjectId("003"), "customer": ObjectId("100"), "variable": "c", "value": "1" }
现在我的问题是:是否可以将此结果作为一个文档而不是多个文档?所以我希望的结果应该是这样的:
{ "variables": [
{ "variable": "a", "value": "2" },
{ "variable": "b", "value": "7" },
{ "variable": "c", "value": "1" }
] }
我很期待你的想法,因为我已经玩了很多投影和聚合,但没有找到一个好的解决方案。提前感谢!
示例查询:
db.getCollection('variables').aggregate([
{
$group: {
_id: '$customer',
entries : {$push: '$$ROOT'}
},
},
]);
这会给你想要达到的结果。
[
{
"_id" : "100",
"entries" : [
{
"_id" : "001",
"customer" : "100",
"variable" : "a",
"value" : "2"
},
{
"_id" : "002",
"customer" : "100",
"variable" : "b",
"value" : "7"
},
{
"_id" : "003",
"customer" : "100",
"variable" : "c",
"value" : "1"
}
]
},
{
"_id" : "200",
"entries" : [
{
"_id" : "004",
"customer" : "200",
"variable" : "a",
"value" : "5"
},
{
"_id" : "005",
"customer" : "200",
"variable" : "a",
"value" : "3"
}
]
}
]