[英]Querying mongodb dbref inner field
我需要隱藏其isActive標志設置為false的所有用戶相關數據。 有許多集合我使用了DBRef類型的用戶集合(大約14個集合),每個集合包含超過1000萬條記錄。
讓我借助例子更恰當地解釋一下。
假設我有兩個集合:
用戶集包含以下字段:
聯系人集合包含以下字段:
現在我想觸發一個查詢,它將獲取ContactStatus = "Confirmed" && Contacter.isActive = true && Contactee.isActive = true
所有聯系人ContactStatus = "Confirmed" && Contacter.isActive = true && Contactee.isActive = true
就mongodb而言,查詢將是這樣的:
db.Contacts.find({"ContactStatus" : "Confirmed", "Contacter.isActive" : true, "Contactee.isActive" : true});
但是當我在mongo shell中運行此查詢時,它總是返回零記錄。
所以這里的問題是1)是否可以在DBRef的內部字段上觸發查詢? 2)如果沒有,那我該怎么做呢。
注意 - 在此階段,我無法修改數據模型。 在“in”查詢的幫助下,我可以做到這一點。 但它最終會在我需要隱藏該用戶的地方增加一次往返。
目前我使用的是mongodb-2.4.5和Spring-Data-MongoDB-1.2.3 jar
到目前為止我的代碼是這樣的 -
Criteria criteria = new Criteria();
criteria = criteria.where(Contact.CONTACT_REQUEST_STATUS).is(ContactRequestStatusEnum.ACCEPTED);
criteria = criteria.and(Contact.CONTACTER + "." + User.ACTIVE).is(Boolean.TRUE);
criteria = criteria.and(Contact.CONTACTEE + "." + User.ACTIVE).is(Boolean.TRUE);
Query q = new Query(criteria);
List<Contact> contacts = Contacts.find(q, Contact.class);
是的,您可以查詢DbRef字段,但不能查詢您的方式。
DbRef是一個小的子文檔,包含兩個字段:
$ref
ref-引用的集合
$id
- 引用集合中文檔的_id值
(實際上,如果引用的是另一個db,則會有第三個字段$db
db)
所以,使用shell你只能要求contacter。$ id(返回用戶集合中的Object id)或$ ref,但是你不能查詢諸如contract.isActive之類的東西,因為這是用戶的一個字段,而不是Ref,shell不會獲取用戶。
如果您使用的是java驅動程序,則Contacter和Contactee都表示為com.mongodb.DBRef
,它有一個方法fetch()來檢索DBObject
(用戶)
如果使用spring-data-mongodb,您可能希望擁有如下類:
class Contact {
@DBRef
User contacter;
@DBRef
User contactee;
String contactStatus;
}
將為您加載兩個用戶對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.