我需要隱藏其isActive標誌設置爲false的所有用戶相關數據。有許多集合,其中我使用了DBRef類型的用戶集合(大約14個集合),每個集合包含超過1000萬條記錄。查詢mongodb dbref內部字段
讓我通過例子更好地解釋它。
假設我有兩個集合:
- 用戶
- 聯繫
用戶集合包含以下字段:
- 名字(字符串)
- 姓(字符串)
- isActive(布爾)
聯繫集合包含以下字段:
- 查詢聯繫人(用戶)聲明爲類型DBREF的。
- 聯繫人(用戶)聲明爲DBRef類型。
- ContactStatus(字符串)
現在我想火的查詢將獲取所有其 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和 彈簧數據的MongoDB-1.2.3罐子
到目前爲止,我的代碼是這樣的 -
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);
感謝重播@orid。是的,我使用的是spring-data-mongodb驅動程序,我的模型類與您所展示的相同。但我不明白你的這一行 - **但你可以在聯繫人上使用isActive,它不是爲你預取的**請你再解釋一下。 – mobizen
對不起,錯字。應該是**,但你不能**而不是**,但你可以**。修正了我的帖子 –