У меня есть классы следующим образом:запросов и обновления в MongoDB используя морфий хранилищу
@Entity("Collection_IAGlobals")
public class MoDBIAGlobals {
@Id
@Indexed
String id;
@Embedded
Map<EnumChannelType, MoDBChannel> data = new HashMap<EnumChannelType, MoDBChannel>();
}
где MoDBChannel класс:
@Entity("Collection_IAGlobals")
@Embedded
public class MoDBChannel extends MoDBTopic {
@Indexed
private String channelId;
@Embedded
private Map<String, MoDBTopic> data = new HashMap<String, MoDBTopic>();
}
и MoDBTopic класс:
@Entity("Collection_IAGlobals")
@Embedded
public class MoDBTopic {
private String topic;
private Double score1 = 0.0;
private Double score2 = 0.0;
}
и MoDBIA_DAO класс:
public class MoDBIA_DAO extends BasicDAO<MoDBIAGlobals, String> {
public MoDBIA_DAO(Mongo mongo, Morphia morphia, String dbName) {
super(mongo, morphia, dbName);
}
}
У меня есть объект класса MoDBIAGlobals сохранен как:
dataStore.save(globals)
где JSON из глобалов выглядит следующим образом:
{"id":"usr1234",
"data":{"FACEBOOK":{"channelId":"FB1234",
"data":{"NO_TOPIC":{"topic":"NO_TOPIC",
"score1":1.0,
"score2":0.0}},
"score1":0.0,
"score2":0.0}}}
Теперь я хочу, чтобы запросить таким образом, чтобы получить объекты класса MoDBIAGlobals
, где "id"=="usr1234"
и "channelId"=="FB1234"
. Как я могу создать этот запрос?
Я попытался, как следует, но я не мог получить никакого результата:
MoDBIA_DAO dao = new MoDBIA_DAO(mongo, morphia, DB_Name);
Datastore dataStore = morphia.createDatastore(mongo, DB_Name);
Query<MoDBIAGlobals> query = dataStore.createQuery(MoDBIAGlobals.class).disableValidation();
query.field("data.channelId").equal("FB1234");
query.field("data.data.topic").equal("NO_TOPIC");
QueryResults<MoDBIAGlobals> results = dao.find(query);
System.out.println("results: " + results);
System.out.println("results.count: " + results.countAll());
это результат печати как:
results: { "data.channelId" : "FB1234" , "data.data.topic" : "NO_TOPIC"}
results.count: 0
ли я делаю что-то неправильно?
Вы пробовали этот запрос на Монго оболочки? Как насчет следующего запроса, он работает? '{" data.channelId ":" FB1234 "," data.data.topic.NO_TOPIC ":" NO_TOPIC "}' –
Я совершенно новый для mongodb и работаю напрямую через java. У меня нет опыта работы с оболочкой mongo. –
Я только что проверил и не дал никакого результата в оболочке тоже. Поэтому я предполагаю ошибку в параметрах запроса. Но какая ошибка? –