Pat*_*ira 1 json mongodb unset spring-data-jpa aggregation-framework
有人可以帮我解决这种情况吗?
我有这个假 JSON...
[
{
"user": {
"type": "PF",
"code": 12345,
"Name": "Darth Vader",
"currency": "BRL",
"status": "ACTIVE",
"localization": "NABOO",
"createDate": 1627990848665,
"olderAdress": [
{
"localization": "DEATH STAR",
"status": "BLOCKED",
"createDate": 1627990848665
},
{
"localization": "TATOOINE",
"status": "CANCELLED",
"createDate": 1627990555665
},
{
"localization": "ALDERAAN",
"status": "INACTIVED",
"createDate": 1627990555665
},
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
code如果状态等于“已阻止”或“已取消”,我想删除该字段。我使用聚合是因为我在实际示例之前做了很多事情。我怎样才能做到这一点??
我需要这个结果:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"user": {
"Name": "Darth Vader",
"createDate": 1.627990848665e+12,
"currency": "BRL",
"localization": "DEATH STAR",
"status": "BLOCKED",
"type": "PF"
}
},
{
"_id": ObjectId("5a934e000102030405000000"),
"user": {
"Name": "Darth Vader",
"createDate": 1.627990555665e+12,
"currency": "BRL",
"localization": "TATOOINE",
"status": "CANCELLED",
"type": "PF"
}
},
{
"_id": ObjectId("5a934e000102030405000000"),
"user": {
"Name": "Darth Vader",
"code": 12345,
"createDate": 1.627990555665e+12,
"currency": "BRL",
"localization": "ALDERAAN",
"status": "INACTIVED",
"type": "PF"
}
},
{
"_id": ObjectId("5a934e000102030405000000"),
"user": {
"Name": "Darth Vader",
"code": 12345,
"createDate": ISODate("2021-09-16T17:36:26.405Z"),
"currency": "BRL",
"localization": "NABOO",
"status": "ACTIVE",
"type": "PF"
}
}
]
Run Code Online (Sandbox Code Playgroud)
Soo...与名称无关,我将检查状态,如果您考虑到这种情况,我将删除该字段code。
询问
$$REMOVE如果某个字段获取该值,则使用系统变量并将其删除user.code则保留旧值,否则该字段"BLOCKED""CANCELLED""$$REMOVE"db.collection.aggregate([
{
"$set": {
"user.code": {
"$cond": [
{
"$in": [
"$user.status",
[
"BLOCKED",
"CANCELLED"
]
]
},
"$$REMOVE",
"$user.code"
]
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
编辑
上面的代码检查user.status但你想删除代码或不基于user.olderAdress.status(展开后)(其2个字段具有相同的名称状态)
查询(在您已有的阶段之后添加此查询)
{
"$set": {
"user.code": {
"$cond": [
{
"$in": [
"$user.status",
[
"BLOCKED",
"CANCELLED"
]
]
},
"$$REMOVE",
"$user.code"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)