MongoDB - 将数组拆分为多个多个文档,并将现有文档替换为数组的对象



我收集了一个大型json文档,如下所示:

{
"_id": {
"$oid": "5e7a50e7f1d41b3ea05aa46e"
},
"response": {
"count": 2,
"items": [
{
"id": 1,
"first_name": "Unknown",
"last_name": "Unknown",
"is_closed": false,
"can_access_closed": true,
"photo": "1.jpg",
"track_code": "d9e2ca2eG4GbHAQSwz8Ne4WBiVx"
},
{
"id": 2,
"first_name": "Lorem",
"last_name": "Ipsum",
"is_closed": false,
"can_access_closed": true,
"photo": "2.jpg",
"track_code": "23f1219a7j1xyWba69jz7p"
}
]
}
}

如何在集合中按单个对象(例如按项中的id(拆分"项"?因此,我想要一些类似的东西:

对象#1

{
"_id": {
"$oid": "5e7a50e7f1d41b3ea05aa46e"
},
"id": 1,
"first_name": "Unknown",
"last_name": "Unknown",
"is_closed": false,
"can_access_closed": true,
"photo": "1.jpg",
"track_code": "d9e2ca2eG4GbHAQSwz8Ne4WBiVx"
}

对象#2

{
"_id": {
"$oid": "ae2a40e7ffd41b3ea05aa46e"
},
"id": 2,
"first_name": "Lorem",
"last_name": "Ipsum",
"is_closed": false,
"can_access_closed": true,
"photo": "2.jpg",
"track_code": "23f1219a7j1xyWba69jz7p"
}

我不明白如何在文档中查找这个。

您可以尝试以下查询,这样您的结果可能会有比收集中实际数量更多的文档,因为我们正在分解项目数组:

db.collection.aggregate([
/** Adds '_id' field to each object inside items array, this can be done after 'unwind',
*  if it's done after 'unwind' no.of docs to be iterated in 'unwind' is more, So better be done as first stage*/
{
$addFields: {
"response.items._id": "$_id"
}
},
/** Unwind items array, will exclude docs where items is not an array/doesn't exists */
{
$unwind: "$response.items"
},
/** Replace 'response.items' object as new root(document) */
{
$replaceRoot: {
newRoot: "$response.items"
}
}
])

测试:MongoDB Playground

参考:聚合管道

最新更新