正在查询mongodb dbref内部字段



我需要隐藏所有isActive标志设置为false的用户相关数据。在许多集合中,我使用了DBRef类型的用户集合(大约14个集合),每个集合包含超过1000万条记录。

让我举例更恰当地解释一下。

假设我有两个集合:

  1. 用户
  2. 联系人

用户集合包含以下字段:

  1. 名字(字符串)
  2. 姓氏(字符串)
  3. isActive(布尔值)

联系人集合包含以下字段:

  1. Contacter(User)声明为DBref类型
  2. 被联系人(用户)声明为DBRef类型
  3. ContactStatus(字符串)

现在我想启动一个查询,该查询将获取所有联系人ContactStatus = "Confirmed" && Contacter.isActive = true && Contactee.isActive = true

就mongodb而言,查询将是这样的:

db.Contacts.find({"ContactStatus" : "Confirmed", "Contacter.isActive" : true, "Contactee.isActive" : true});

但是当我在mongoshell中运行这个查询时,它总是返回一个零记录。

所以这里的问题是1) 是否可以对DBRef的内部字段发起查询?2) 如果没有,那么我该如何做到这一点。

注意-在这个阶段,我无法修改我的数据模型。在"in"查询的帮助下,我可以实现这一点。但它最终会增加我需要隐藏用户的往返行程。

目前我正在使用mongodb-2.4.5和Spring-Data-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);

是的,您可以查询DbRef字段,但不能按照您的方式进行查询。

DbRef是一个小型子文档,包含两个字段:

$ref-引用的集合

$id-引用集合中文档的_id值

(如果引用的是不同的db,则实际上存在第三个字段$db

因此,使用shell,您只能请求联系人$id(返回users集合中的Object id)或$ref,但不能查询contract.isActive之类的内容,因为这是用户的字段,而不是ref,shell不会获取用户。

如果您使用的是java驱动程序,Contacter和Contactee都表示为com.mongodb.DBRef,它有一个方法fetch()来检索DBObject(用户)

如果使用springdatamongodb,您可能希望有这样的类:

class Contact {
@DBRef
User contacter; 
@DBRef
User contactee;
String contactStatus; 
}

两个用户对象都将为您加载

相关内容

  • 没有找到相关文章

最新更新