提取array的值并添加到相同的select mongoDB中



我是mongoDB聚合的新手,我有这种情况。我有这个Json,我需要通过select进行转换这个对象:

{
"type": "PF",
"code": 12345
"Name": Darth Vader,
"currency": "BRL",
"status": "SINGLE",
"adress": [
{
"localization": "DEATH STAR",
"createDate": 1627990848665
},
{
"localization": "TATOOINE",
"createDate": 1627990555665
},
]
}

:

{
"type": "PF",
"code": 12345
"Name": Darth Vader,
"currency": "BRL",
"status": "SINGLE",
"localization": "DEATH STAR",
"createDate": 1627990848665
},
{
"type": "PF",
"code": 12345
"Name": Darth Vader,
"currency": "BRL",
"status": "SINGLE",
"localization": "TATOOINE",
"createDate": 1627990555665
}

因此,在我的查询完成后,我将有02个对象而不是01个对象。我该怎么做呢?我想通过选择做到这一点,因为转换后,我将按createDate排序,并限制记录的数量返回到API。我在我的项目中使用标准。

方法是$unwind,这将为数组的每个成员创建一个文档副本。

此处测试代码

db.collection.aggregate([
{
"$unwind": {
"path": "$user.adress"
}
},
{
"$set": {
"user": {
"$mergeObjects": [
"$user",
"$user.adress"
]
}
}
},
{
"$unset": [
"user.adress"
]
},
{
"$sort": {
"createDate": 1
}
},
{
"$limit": 10
}
])

Edit1(以上是如果user是一个字段,如果它是集合的名称)

  • $$ROOT是一个系统变量,具有所有文档
  • 的值

此处测试代码

查询

db.collection.aggregate([
{
"$unwind": {
"path": "$adress"
}
},
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [
"$$ROOT",
"$adress"
]
}
}
},
{
"$unset": [
"adress"
]
},
{
"$sort": {
"createDate": 1
}
},
{
"$limit": 10
}
])

最新更新