У меня есть документ по вопросам образования, который, кажется, публичное, как это:MongoDB матч все элементы в массиве
{ name: ..., addresses: [...], courses: [ {name: ... , duration: ..., tags[...]} ] }
теги имеет массив String.
Я пытаюсь найти курс, который имеет некоторые теги внутри, как: Java, затмение, распорки и так далее ...
Мой метод поиска выглядит следующим образом:
public BasicDBList coordinates(List tags){
BasicDBObject cmdBody = new BasicDBObject("aggregate", "EducationalInstitution");
List<BasicDBObject> pipeline = new ArrayList<BasicDBObject>();
BasicDBObject projectParams = new BasicDBObject();
projectParams.put("name", 1);
projectParams.put("addresses.state", 1);
projectParams.put("addresses.locs", 1);
projectParams.put("courses", 1);
pipeline.add(new BasicDBObject("$project", projectParams));
pipeline.add(new BasicDBObject("$match", new BasicDBObject("courses.tags", new BasicDBObject("$all", tags))));
pipeline.add(new BasicDBObject("$unwind", "$addresses"));
cmdBody.put("pipeline", pipeline);
if(!getDatastore().getDB().command(cmdBody).ok()){
throw new MongoException(getDatastore().getDB().command(cmdBody).getErrorMessage());
}
return (BasicDBList) getDatastore().getDB().command(cmdBody).get("result");
}
у меня есть 2 проблемы с этой реализации:
1- Этот запрос Ретур n курсы всех учреждений, если один курс соответствует некоторому параметру. Например, если я ищу Java и учреждение имеет некоторые Java курс, все курсы вернутся
2- Похоже $ все не работает так хорошо. Похоже, что мой запрос ищет какое-то учебное заведение, которое имеет эти теги на своих курсах, вместо этого для некоторого курса, который имеет эти теги внутри
Кто-то может сказать мне, что я делаю неправильно?
Спасибо дружище, это работал на меня !! – Buminda