2017-02-27 91 views
0

我有一個名爲「Customer」的集合。MongoDB AddCriteria:查詢不適用於DBRef列表

{ 
"_id" : ObjectId("588f43140cf2aa78e4da861d"), 
... 
//rest fields 
... 
"company_name" : "Customer", 
"address_id" : [ 
    { 
     "$ref" : "address", 
     "$id" : ObjectId("588f43140cf2aa78e4da861b") 
    }, 
    { 
     "$ref" : "address", 
     "$id" : ObjectId("588f43140cf2aa78e4da861c") 
    } 
], 
"parent_vendor_id" : { 
    "$ref" : "vendor", 
    "$id" : ObjectId("588f40e60cf2aa78e4da8611") 
} 
} 

而這個集合中我使用的「地址」的DBREF,通過address_id映射這是在列表的形式。

地址集合:

{ 
"_id" : ObjectId("588f40e60cf2aa78e4da860f"), 
"_class" : "com.bursys.bcf.domain.Address", 
... 
//rest fields 
... 
"city" : "Durham", 
"country" : "United States" 
} 

現在我想找出城市,客戶和我使用

Query query = new Query(); 
query.addCriteria(where("address_id.$ref").is("address").and("address_id.city").is("Durham")); 

customers = mongo.find(query, Customer.class); 

但此查詢,我沒有得到結果。所以請糾正我... 任何形式的幫助將不勝感激... 在此先感謝

+0

請分享你的 「客戶」 的模式。 –

回答

0

DBRef旨在被查詢id參考。

考慮使用嵌入式文檔address

{ 
    "_id": ObjectId("588f43140cf2aa78e4da861d"), 
    "company_name": "Customer", 
    "address": [{ 
     "city" : "Durham", 
     "country" : "United States" 
    }, { 
     "city" : "Bangalore", 
     "country" : "India" 
    }] 
} 

更新您的查詢

Query query = new Query(); 
query.addCriteria(where("address.city").is("Durham")); 
customers = mongo.find(query, Customer.class); 
+0

嘿Veeram,感謝您的幫助,但我不想添加地址作爲子文件,因爲它使收集龐大。這就是爲什麼使用DBRef尋找解決方案的原因。 –

+0

就像我說過那是不可能的。我希望你不用關係型數據庫來思考它。它將作爲嵌入式文檔高效且易於查詢。如果你堅持保持這種方式,那麼你必須通過地址中的_id'來訪問它。另一種解決方案雖然不需要,但是爲地址創建單獨的集合並使用'$ lookup'來加入地址 – Veeram