2013-12-10 55 views
0

我使用MondoDB和Morphia 0.105图层。MongoDB/Morphia大小查询操作失败?

User类是:

@Entity 
public class User { 

@Id 
private ObjectId id = null; 

private String userId = null; 
private String fullName = null; 
@Embedded 
private UserType userType = null; 
@Embedded 
private Set<Rights> rights = new HashSet<Rights>(); 

和我的测试类是:

public class Test { 

    public static void main(String[] args) throws UnknownHostException { 
     Morphia m = new Morphia(); 
     Datastore ds = m.createDatastore(new MongoClient("localhost"), "test"); 
     m.map(User.class); 


     User u = new User(); 
     u.setFullName("User Name"); 
     u.setUserId("USERID"); 
     //u.getRights().add(Rights.ADMIN); //NO rights added VS ONE right added 

     ds.save(u); 
     u = ds.find(User.class).filter("rights size", 0).get(); 
     System.out.println(u); 
     System.out.println(u != null); 
    } 

} 

我得到这个意外的结果:

The type(s) for the query/update may be inconsistent; using an instance of type 'java.lang.Integer' for the field 'org.vts.sis2.entities.User.rights' which is declared as 'java.util.Set' 

如果我取消线//u.getRights().add(Rights.ADMIN);,增加了用户权限,查询ds.find(User.class).filter("rights size", 1).get()返回更正等结果(即使显示警告,但这是一个误报,因为在我看来,将大小运算符的结果与整数进行比较是正确的)!

我该如何查询空rights list/set字段的用户?

感谢

回答

1

试试这个:

ds.find(User.class).field("rights").sizeEq(0).get()

+0

的输出结果相同,没有工作:( – Fuzzo

+1

见https://github.com/mongodb/morphia/issues/561一个解释。 – evanchooly

+0

这是我的问题,谢谢你的回复! – Fuzzo