数据结构
{
"_id" : ObjectId("59e72a88d416aa6ab8f79d7b"),
"category_name" : "油",
"parent_id" : "0",
"__v" : 0
}
/* 2 */
{
"_id" : ObjectId("59e72acad416aa6ab8f79d7c"),
"category_name" : "肉类",
"parent_id" : "0",
"__v" : 0
}
/* 3 */
{
"_id" : ObjectId("59e85b76813a3011280b1186"),
"category_name" : "芝麻肉",
"parent_id" : "59e72acad416aa6ab8f79d7c",
"__v" : 0
}
/* 4 */
{
"_id" : ObjectId("59e85b84813a3011280b1187"),
"category_name" : "猪肉",
"parent_id" : "59e72acad416aa6ab8f79d7c",
"__v" : 0
}
/* 5 */
{
"_id" : ObjectId("5a15027971d44b046f83d605"),
"category_name" : "牛肉油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
}
/* 6 */
{
"_id" : ObjectId("5a1502d871d44b046f83d606"),
"category_name" : "花生油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
}
/* 7 */
{
"_id" : ObjectId("5a154dd83af2940ba6727a39"),
"category_name" : "豆油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
}
这是我的查询代码;结果达不到,适合用组合函数查吗。还是哪不对了
db.getCollection('categoties').group({
keyf:function(doc){
if(doc.parent_id==0){
return {id:doc._id,name:doc.category_name}
}else{
return {id:doc.parent_id}
}
},
reduce:function(obj,prev){
if(obj.parent_id!=0){
prev.items.push(obj);
}
},
initial:{items:[]}
})
#结果如下:
[
{
"id" : ObjectId("59e72a88d416aa6ab8f79d7b"),
"name" : "油",
"items" : []
},
{
"id" : ObjectId("59e72acad416aa6ab8f79d7c"),
"name" : "肉类",
"items" : []
},
{
"id" : "59e72acad416aa6ab8f79d7c",
"items" : [
{
"_id" : ObjectId("59e85b76813a3011280b1186"),
"category_name" : "芝麻肉",
"parent_id" : "59e72acad416aa6ab8f79d7c",
"__v" : 0
},
{
"_id" : ObjectId("59e85b84813a3011280b1187"),
"category_name" : "猪肉",
"parent_id" : "59e72acad416aa6ab8f79d7c",
"__v" : 0
}
]
},
{
"id" : "59e72a88d416aa6ab8f79d7b",
"items" : [
{
"_id" : ObjectId("5a15027971d44b046f83d605"),
"category_name" : "牛肉油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
},
{
"_id" : ObjectId("5a1502d871d44b046f83d606"),
"category_name" : "花生油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
},
{
"_id" : ObjectId("5a154dd83af2940ba6727a39"),
"category_name" : "豆油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
}
]
}
]
我想要的结果是这样的:
[
{
"id" : ObjectId("59e72a88d416aa6ab8f79d7b"),
"name" : "油",
"items" : [
{
"_id" : ObjectId("5a15027971d44b046f83d605"),
"category_name" : "牛肉油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
},
{
"_id" : ObjectId("5a1502d871d44b046f83d606"),
"category_name" : "花生油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
},
{
"_id" : ObjectId("5a154dd83af2940ba6727a39"),
"category_name" : "豆油",
"parent_id" : "59e72a88d416aa6ab8f79d7b",
"__v" : 0
}
]
},
{
"id" : ObjectId("59e72acad416aa6ab8f79d7c"),
"name" : "肉类",
"items" : [
{
"_id" : ObjectId("59e85b76813a3011280b1186"),
"category_name" : "芝麻肉",
"parent_id" : "59e72acad416aa6ab8f79d7c",
"__v" : 0
},
{
"_id" : ObjectId("59e85b84813a3011280b1187"),
"category_name" : "猪肉",
"parent_id" : "59e72acad416aa6ab8f79d7c",
"__v" : 0
}
]
}
]
你的
parent_id
字段和_id
字段的数据格式应该一致的,这样设计才合理:以下回答是在你的
parent_id
字段和_id
字段的数据格一致的情况下:用聚合函数aggregate