我需要隐藏其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
对不起,错字。应该是**,但你不能**而不是**,但你可以**。修正了我的帖子 –