#mongodb #spring-data-mongodb
#mongodb #spring-data-mongodb
Вопрос:
У меня есть коллекция документов. В каждом документе есть два поля — code
и status
. Моя коллекция mongodb содержит некоторые документы, такие как следующие:
[{
"code":"1234",
"status":"A"
},
{
"code":"1234",
"status":"A"
}
{
"code":"1234",
"status":"B"
},
{
"code":"1235",
"status":"A"
}]
Я хочу найти количество по статусу для каждого кода. Мой желаемый результат выглядит примерно так:
[
{"code":"1234", "counts": {"A":2, "B":1}},
{"code":"1235", "counts": {"A":1, "B":0}}
]
Как я могу сделать это с весенними данными mongodb? Я очень новичок в mongodb.
Обновление Мне удалось написать запрос mongodb. Вот оно:
db.mycollection.aggregate(
[
{"$group": {"_id": {"code":"$code", "status":"$status"}, "total": {"$sum":1}}},
{"$group": {"_id": "$_id.code", "counts": {"$push": {"status": "$_id.status", "count":"$total" }}}},
{"$project" : {"code":"$_id", _id: 0, counts:1}}
])
Кто-нибудь может помочь в написании этого запроса в spring data mongodb?
Ответ №1:
Пожалуйста, ознакомьтесь со следующим кодом
DBObject counts= new BasicDBObject();
counts.put("status", "status");
counts.put("count", "count");
AggregationResults<Output> results = operations.aggregate(
newAggregation(Codes.class,
group("code","status").count().as("count"),
group("code").push(counts).as("counts")
), Output.class);
Я рассмотрел коды.класс java в качестве вашего входного класса документа и Output.java класс как желаемый класс результата.
Ответ №2:
Сложный запрос, но это должно сработать для вас, сделав еще один шаг за пределы mongodb. Что касается весенней части вашего вопроса, об этом есть много руководств.
db.codes.aggregate(
{$group: {_id: {code: "$code", status: "$status"}, count: {$sum: 1}}},
{$group: {_id: "$_id.code", "counts": {$push: {status: "$_id.status", count: "$count"}}}})
{ "_id" : 123, "counts" : [ { "status" : "B", "count" : 1 }, { "status" : "A", "count" : 1 } ] }
{ "_id" : 124, "counts" : [ { "status" : "C", "count" : 2 }, { "status" : "B", "count" : 1 } ] }
Комментарии:
1. Спасибо за ваш ответ. Я уже написал запрос в mongo query и обновил вопрос. Сейчас я пытаюсь написать это весной.
2. круто, не могу помочь вам с весной, хотя я разработчик ruby. как насчет того, чтобы принять мой ответ тогда?
3. Я также решил весеннюю часть. Могу ли я отредактировать ваш ответ и добавить часть Java?