如何聚合 monogo 并对其输出进行某些更改
how to monogo aggregate and make certain changes to its output
我有一些这样的文档,我们需要对其输出进行某些更改
"gameId": "string",
"markets": {
"market X": {
"instagram": "string",
"lastVersion": 0,
"market": "market X",
"name": "string",
"supportedVersion": 0,
"telegram": "string",
"config":{"A":1,"B":2 , "C":"c" }
},
"market Z":{
"instagram": "string",
"lastVersion": 0,
"market": "market Z",
"name": "string",
"supportedVersion": 0,
"telegram": "string",
"config":{"D":5,"E":8 , "F":"vb" }
}
}
我想写一个 monogo 聚合使输出如下
[
{
"gameId": "string",
"instagram": "string",
"lastVersion": 0,
"market": "string",
"name": "string",
"supportedVersion": 0,
"telegram": "string"
},
{
"gameId": "string",
"instagram": "string",
"lastVersion": 0,
"market": "string",
"name": "string",
"supportedVersion": 0,
"telegram": "string"
}
]
我试图得到正确的答案,但没有成功
你觉得我应该怎么做?
我尝试通过此查询获得正确答案
game_collection.aggregate([
{
"$match": {
"_id": ObjectId(data["gameId"])
}
},
{
"$project": {
"x": {"$objectToArray": "$markets"},
}
},
{
"$replaceRoot": {
"newRoot": {
"gameId": data["gameId"],
# "name": "$x.k",
"address": "$x.v"
}
}
},
{
"$addFields": {
"gameId": f"$$this.v.gameId",
}
}
])
此聚合管道从您的示例文档生成您想要的输出。
db.collection.aggregate([
{
"$addFields": {
"x": {
"$map": {
"input": {
"$objectToArray": "$markets"
},
"in": "$$this.v"
}
}
}
},
{
"$unset": "x.config"
},
{
"$addFields": {
"x.gameId": "$gameId"
}
},
{
"$unwind": "$x"
},
{
"$replaceWith": "$x"
}
])
在 mongoplayground.net 上试用。
我有一些这样的文档,我们需要对其输出进行某些更改
"gameId": "string",
"markets": {
"market X": {
"instagram": "string",
"lastVersion": 0,
"market": "market X",
"name": "string",
"supportedVersion": 0,
"telegram": "string",
"config":{"A":1,"B":2 , "C":"c" }
},
"market Z":{
"instagram": "string",
"lastVersion": 0,
"market": "market Z",
"name": "string",
"supportedVersion": 0,
"telegram": "string",
"config":{"D":5,"E":8 , "F":"vb" }
}
}
我想写一个 monogo 聚合使输出如下
[
{
"gameId": "string",
"instagram": "string",
"lastVersion": 0,
"market": "string",
"name": "string",
"supportedVersion": 0,
"telegram": "string"
},
{
"gameId": "string",
"instagram": "string",
"lastVersion": 0,
"market": "string",
"name": "string",
"supportedVersion": 0,
"telegram": "string"
}
]
我试图得到正确的答案,但没有成功 你觉得我应该怎么做?
我尝试通过此查询获得正确答案
game_collection.aggregate([
{
"$match": {
"_id": ObjectId(data["gameId"])
}
},
{
"$project": {
"x": {"$objectToArray": "$markets"},
}
},
{
"$replaceRoot": {
"newRoot": {
"gameId": data["gameId"],
# "name": "$x.k",
"address": "$x.v"
}
}
},
{
"$addFields": {
"gameId": f"$$this.v.gameId",
}
}
])
此聚合管道从您的示例文档生成您想要的输出。
db.collection.aggregate([
{
"$addFields": {
"x": {
"$map": {
"input": {
"$objectToArray": "$markets"
},
"in": "$$this.v"
}
}
}
},
{
"$unset": "x.config"
},
{
"$addFields": {
"x.gameId": "$gameId"
}
},
{
"$unwind": "$x"
},
{
"$replaceWith": "$x"
}
])
在 mongoplayground.net 上试用。