展开对象数组但保留其父级
Unwind object array but preserve its parent
我想展开一些数据,但保留父数据。我得到了整个扁平化的对象,但缺少第一个。我想保留那个。我怎么能做这样的事?
我的文档:
[
{
"key": 1,
"keys": [
{
key: 3
},
{
key: 4
},
{
key: 5
},
]
},
{
"key": 2
}
]
执行此操作后:
db.collection.aggregate([
{
"$match": {},
},
{
"$unwind": {
path: "$keys",
preserveNullAndEmptyArrays: true,
}
},
{
"$replaceWith": {
"$mergeObjects": [
"$$ROOT",
"$keys"
]
}
}
])
我得到这个:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 3,
"keys": {
"key": 3
}
},
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 4,
"keys": {
"key": 4
}
},
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 5,
"keys": {
"key": 5
}
},
{
"_id": ObjectId("5a934e000102030405000001"),
"key": 2
}
]
但应该是这样的:
{ key: 1},
{ key: 2},
{ key: 3},
{ key: 4},
{ key: 5},
这可能实现吗?这有可能用大数据来完成吗($group stage 让我内存溢出)?
查询
- 在键数组中添加键(如果键不是数组,键将以[]开头)
- 展开密钥
- replaceRoot
- 排序
aggregate(
[{"$set":
{"keys":
{"$concatArrays":
[{"$cond": [{"$isArray": ["$keys"]}, "$keys", []]},
[{"key": "$key"}]]}}},
{"$unwind": "$keys"},
{"$replaceRoot": {"newRoot": "$keys"}},
{"$sort": {"key": 1}}])
我想展开一些数据,但保留父数据。我得到了整个扁平化的对象,但缺少第一个。我想保留那个。我怎么能做这样的事?
我的文档:
[
{
"key": 1,
"keys": [
{
key: 3
},
{
key: 4
},
{
key: 5
},
]
},
{
"key": 2
}
]
执行此操作后:
db.collection.aggregate([
{
"$match": {},
},
{
"$unwind": {
path: "$keys",
preserveNullAndEmptyArrays: true,
}
},
{
"$replaceWith": {
"$mergeObjects": [
"$$ROOT",
"$keys"
]
}
}
])
我得到这个:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 3,
"keys": {
"key": 3
}
},
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 4,
"keys": {
"key": 4
}
},
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 5,
"keys": {
"key": 5
}
},
{
"_id": ObjectId("5a934e000102030405000001"),
"key": 2
}
]
但应该是这样的:
{ key: 1},
{ key: 2},
{ key: 3},
{ key: 4},
{ key: 5},
这可能实现吗?这有可能用大数据来完成吗($group stage 让我内存溢出)?
查询
- 在键数组中添加键(如果键不是数组,键将以[]开头)
- 展开密钥
- replaceRoot
- 排序
aggregate(
[{"$set":
{"keys":
{"$concatArrays":
[{"$cond": [{"$isArray": ["$keys"]}, "$keys", []]},
[{"key": "$key"}]]}}},
{"$unwind": "$keys"},
{"$replaceRoot": {"newRoot": "$keys"}},
{"$sort": {"key": 1}}])