我需要隐藏所有 isActive 标志设置为 false 的用户相关数据。在许多集合中,我使用了 DBRef 类型的用户集合(大约 14 个集合),每个集合包含超过 1000 万条记录。
让我在示例的帮助下更正确地解释它。
假设我有两个集合:
- 用户
- 接触
用户集合包含以下字段:
- 名字(字符串)
- 姓氏(字符串)
- isActive(布尔值)
联系人集合包含以下字段:
- Contacter (User) 声明为 DBref 类型。
- 联系人(用户)声明为 DBRef 类型。
- 联系状态(字符串)
现在我想触发一个查询,它将获取所有联系人
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);