Привет Я использую Java API для подключения к моей базе данных. Я использую новые классы для connecto, поскольку те, которые почти во всех примерах отмечены, устарели Я использую MongoClient для подключения к MongoDatabase db. После этого я:Встроенный Java API-интерфейс MongoDB не возвращает результаты
MongoCollection<Document> coll = db.getCollection("collName");
AggregateIterable<Document> res = collection.aggregate(myquery);
for(Document d : res)
{
System.out.println(d.toJson());
}
Это ничего не печатает. Я попытался использовать result.first() тоже, но он только печатает null.
Теперь причина, по которой я не указываю подробности о моих данных, заключается в следующем. Если я посмотрю в файле журнала в/var/log/mongodb, я вижу переведенный запрос. Если я отправлю ТОЧНЫЙ запрос в оболочку монго. Он просто работает как шарм. Я нашел здесь сообщение, в котором говорится, что порядок моих агрегатных функций может быть проблемой, но это не имеет смысла, если оно работает, если оно вставлено в оболочку.
Так вот мой немного переделал запрос
Document sort = new Document("$sort", new Document("Day", 1));
Document matchBeforeUnwindDayOfTheWeek = new Document("Day", day);
Document matchBeforeUnwindVar1 = new Document("'value.Data'", new Document("$elemMatch",
new Document("var1", new Document("$gt", minvar1).append("$lt", maxvar1))));
Document matchBeforeUnwindVar2 = new Document("'value.Data'", new Document("$elemMatch",
new Document("var2", new Document("$gt", mingvar2).append("$lt", maxvar2))));
List<Document> matchBeforeUnwindAnd = new LinkedList<Document>();
matchBeforeUnwindAnd.add(matchBeforeUnwindDayOfTheWeek);
matchBeforeUnwindAnd.add(matchBeforeUnwindVar1);
matchBeforeUnwindAnd.add(matchBeforeUnwindVar2);
Document matchBeforeUnwind = new Document("$match", new Document("$and", matchBeforeUnwindAnd));
Document unwind = new Document("$unwind", "$value.Data");
Document matchAfterUnwindVar1 = new Document("'value.Data.var1'",
new Document("$gt", minvar1).append("$lt", minvar1));
Document matchAfterUnwindVar2 = new Document("'value.Data.var2'",
new Document("$gt", minvar2).append("$lt", maxvar2));
List<Document> matchAfterUnwindAnd = new LinkedList<Document>();
matchAfterUnwindAnd.add(matchAfterUnwindVar1);
matchAfterUnwindAnd.add(matchAfterUnwindVar2);
Document matchAfterUnwind = new Document("$match", new Document("$and", matchAfterUnwindAnd));
Document groupFields = new Document("_id", "$_id");
groupFields.put("Grouped", new Document("$push", "$value.Data"));
Document group = new Document("$group", groupFields);
List<Document> query = new LinkedList<Document>();
query.add(sortByDayOfTheWeek);
query.add(matchBeforeUnwind);
query.add(unwind);
query.add(matchAfterUnwind);
query.add(group);
AggregateIterable<Document> result = collection.aggregate(query);
Edit: Я попробовал его с очень простым запросом, как один размещено ниже. Запросы все еще хорошо переносятся в файле журнала.
Хорошо, проблема в определении конвейера агрегации вполне вероятна, и это полностью отсутствует в вашем вопросе. Пожалуйста, отредактируйте свой вопрос. –
Да, но как это могло быть? Я имею в виду, что я могу увидеть мой конвейер в файле журнала после его выполнения, и если я скопирую его в оболочку, он просто работает. – Minalcar
Я думаю, что момент, который я делал, «мы», не может его увидеть. Как насчет совместного использования, может быть (вероятно) есть проблема там, что вы не видите, но кто-то еще будет –