Измените запрос, чтобы получить ожидаемый результат

#javascript #database #mongodb

#javascript #База данных #mongodb

Вопрос:

Я пытаюсь изменить запрос, чтобы получить ожидаемый результат.Я могу написать запрос, но не получаю ожидаемый результат, чтобы я мог выполнить привязку во внешнем интерфейсе.

Фактический результат:-

 {
    "_id" : null,
    "first" : 3571.0,
    "second" : 24.0
}
  

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

 {    "_id" : null,
    "opertion":edit,
    "count" : 3571.0,
}
{    "_id" : null,
    "opertion":read,
    "count" : 24,
}
{    "_id" : null,
    "opertion":update,
    "count" : 9000,
}
  

Myquery:-

 db.getCollection('blog').aggregate([
  { "$group": {
    "_id": null,
    "first": {
      "$sum": {
        "$cond": [{ "$in": ["$Operation", ["edit1", "edit2"]] }, 1, 0]
      }
    },
    "second": {
      "$sum": {
        "$cond": [{ "$in": ["$Operation", ["read1", "read2"]] }, 1, 0]
      }
    }
  },
},

])
  

Комментарии:

1. будет полезно, если вы добавите входные данные в свой вопрос.

Ответ №1:

если у вас есть коллекция, похожая на приведенную ниже:

 [
{
    "_id" : 1,
    "operation" : "edit1" # some extra fields 
},
{
    "_id" : 2,
    "operation" : "read1"
},
{
    "_id" : 3,
    "operation" : "update1"
}
]
  

используя $ project и $ cond, вы можете переименовать «read1», «read2» в read или обновления в update , или правки в edit затем, сгруппировав в поле «Новая операция», вы можете получить количество каждой операции.
вы можете использовать этот запрос:

 
db.aggregate([
    {
        "$project": {
            "new_operation":
            {
                "$cond": [
                    {"$in":
                         ["$Operation", ["edit1", "edit2"]]
                    }, "edit", {
                        "$cond": [
                            {"$in":
                                 ["$operation", ["read1", "read2"]]
                            }, "read", "update"]
                    }
                ]
            }
        }
    },
    {
        "$group": {
            "_id": "$new_operation",
            "count": {"$sum": 1}
        }
    }
])