#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}
}
}
])