как изменить выходной формат JSON MongoDB - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в MongoDb и был бы признателен за помощь в этом вопросе. Я написал следующий конвейер агрегации

db.collection1.aggregate([
    { "$match": { "type" : "L" }},
    { "$facet": {
        "ON": [
            { "$match" : {"lampStatus":'ON'}},
            { "$count": "ON" }
        ],
        "OFF": [
            { "$match" : {"lampStatus": 'OFF'}},
            { "$count": "OFF" }
        ]
    } },
    { "$project": {
        "ON": { "$ifNull": [{ "$arrayElemAt": ["$ON.ON", 0] }, 0 ] },
        "OFF": { "$ifNull": [{ "$arrayElemAt": ["$OFF.OFF", 0] }, 0 ] },
    } }
])

и получил вывод этого типа

{
    "ON" : 0.0,
    "OFF": 30
} 

но как получить этот тип вывода в формате json

/* 1 */ 
{ 
    "_id": "ON", 
    "count" : 0.0 
} 

/* 2 */ 
{ 
    "_id": "OFF", 
    "count" : 30.0 
} 

Кто-нибудь, пожалуйста, предложите мне?

Фактический объем производства

{
    "ON" : 0.0,
    "OFF" : 30
}

Ожидаемый результат:

{
    "_id" : "ON",
    "COUNT" : 0.0
}

/* 2 */
{
    "_id" : "OFF",
    "COUNT" : 30.0
}

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Если вам нужен еще один трюк с агрегацией

db.collection1.aggregate([
  { "$match": { "type" : "L" }},
  { "$facet": {
    "ON": [{ "$match" : {"lampStatus": "ON" }}, { "$count": "ON" }],
    "OFF": [{ "$match" : {"lampStatus": "OFF" }}, { "$count": "OFF" }]
  }},
  { "$project": {
    "ON": { "$ifNull": [{ "$arrayElemAt": ["$ON.ON", 0] }, 0 ] },
    "OFF": { "$ifNull": [{ "$arrayElemAt": ["$OFF.OFF", 0] }, 0 ] },
  }},
  { "$project": {
    "data": {
      "$map": { "input": { "$objectToArray": "$$ROOT" }, "in": { "_id": "$$this.k", "count": "$$this.v" }}
    }
  }},
  { "$unwind": "$data" },
  { "$replaceRoot": { "newRoot": "$data" }}
])
0 голосов
/ 03 сентября 2018

Обновлен

db.collection.aggregate([
    { "$match": { "type" : "L" }},
    { "$facet": {
        "ON": [
            { "$match" : {"lampStatus":'ON'}},
            { "$count": "ON" }
        ],
        "OFF": [
            { "$match" : {"lampStatus": 'OFF'}},
            { "$count": "OFF" }
        ]
    } },
    {"$project": { 
            myArray: [ 
                {_id:"ON", count: { "$ifNull": [{ "$arrayElemAt": ["$ON.ON", 0] }, 0 ]} },
                {_id:"OFF", count: { "$ifNull": [{ "$arrayElemAt": ["$OFF.OFF", 0] }, 0 ] }}
        ] 
        }},

        {"$unwind":"$myArray"},

        {
            "$replaceRoot": { newRoot: "$myArray" }
        }

])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...