我在查詢具有嵌套對象的集合。領域模型是這樣的:MongoTemplate條件查詢翻譯似乎不正確
@Document(collection="a")
public class A {
protected Map<String, B> fields;
protected String uuid;
protected Date updatedTs;
//Getters and setters and other fields omitted
}
public class B{
protected String c;
protected String d;
}
我使用的是這樣的一個標準查詢:
{ "uuid" : "9DA291A4-1BAB-4B9C-844D-681C3F1ABF6E"}
我創建使用
Criteria.where("uuid").is(uuid);
我可以看到標準對象不包含其他東西,因爲我可以像這樣打印出來:
log.debug("Criteria: " + SerializationUtils.serializeToJsonSafely(c.getCriteriaObject()));
如果我打開調試日誌記錄包org.springframework.data.mongodb.core,我可以看到,實際上是被髮送到服務器的查詢是:
{ "uuid" : "9DA291A4-1BAB-4B9C-844D-681C3F1ABF6E"} fields: null
編輯:我的文檔中包含一個名爲場'fields',並且似乎我的代碼或mongoTemplate/spring-data中的內容實際上是在搜索字段:null。 MongoTemplate的日誌行混淆了我,因爲fields:null實際上是指一組要返回的字段名稱。
那麼,如何在沒有spring-data的情況下搜索與該uuid匹配的文檔,只返回屬性「fields」爲空的文檔?
同時,還研究如何避開這一點,因爲我不能改變文檔結構...
由於只有類A具有UUID字段,所以您的查詢將僅返回類A中的文檔。字段:null意味着其他所有內容一起。我總是在調試模式下看到這一點。很有可能你只查詢某個特定的UUID,而字段恰好爲空。 – ltfishie
這可能是我的映射錯誤,但我不確定。我的文檔結構如下所示:{uuid:「abc123」,fields:{「a」:b「,」c「:{」d「:true}}}這就是我所說的嵌套文檔。知道任何其他的方式來映射這個明智的,而不是像我所做的那樣。我知道查詢將只返回來自集合'A' –
的文檔,爲什麼不嘗試查詢{fields.a:「b」}並查看如果有效的話 – ltfishie