在Spring数据mongo中返回子元素

时间:2018-01-19 09:29:17

标签: java mongodb spring-data-mongodb

我正在使用SpringData Mongo来存储和从mongoDB中检索数据。

在我的网络应用程序中,我有一个管理员(超级用户),可以查看其子用户列表(直接代理),管理员由他的帐户表示,对于每个超级用户/管理员,有多个子用户(DA)。

我有低于JSON来表示我的数据:

{
    "_id" : ObjectId("5a60bf4d52deb4984c5d87c8"),
    "_class" : "com.abc.xyz.DirectAgentsMongoRecord",
    "account" : NumberLong(1234),
    "directAgentDetailsMongoRecords" : [ 
        {
            "daAccount" : NumberLong(987654),
            "name" : "Anil",
            "location" : "vfdgfds",
            "mobileNo" : "09876543",
            "commission" : "8",
            "isActive" : true
        }, 
        {
            "daAccount" : NumberLong(5432),
            "name" : "Sudhir",
            "location" : "frewrwe",
            "mobileNo" : "233223",
            "commission" : "11",
            "isActive" : false
        }, 
        {
            "daAccount" : NumberLong(5432),
            "name" : "Bikas",
            "location" : "frewrwe",
            "mobileNo" : "233223",
            "commission" : "10",
            "isActive" : false
        }, 
        {
            "daAccount" : NumberLong(5432),
            "name" : "Pankaj",
            "location" : "frewrwe",
            "mobileNo" : "1234",
            "commission" : "10",
            "isActive" : false
        }
    ]
}

Spring Data Mongo中的记录:

@Document(collection)
public class DirectAgentDetailsMongoRecord{

    private Long daAccount;

    private String name;

    private String organisation;

    private String location;

    private String mobileNo;

    private BigDecimal dues;

    private BigDecimal creditLimit;

    private BigDecimal commission;

    private Boolean isActive;
//getter setter
}

@Document(collection = "BODirectAgents")
public class DirectAgentsMongoRecord{

    @Id
    private String id;

    private Long account;

    private List<DirectAgentDetailsMongoRecord> directAgentDetailsMongoRecords;

//getter and setters
}

我必须使用搜索条件帐户和子用户列表中的任何字段编写find方法,并且应该返回子用户列表(directAgentDetailsMongoRecords)。

我用以下方法编写了存储库:

@Query(value = "{ 'account' : ?0, 'directAgentDetailsMongoRecords.name' : ?1 }")
    DirectAgentsMongoRecord findByAccountAndDirectAgentDetailsMongoRecordsName(Long account, String agentName);

但是上面的方法会返回超级用户,其中包含所有子用户记录。

我有两个问题:

  1. 在子用户阵列列表中,我必须执行过滤,排序操作,自动建议等,此外一个管理员永远不会需要另一个管理员的数据。目前,我正在为所有管理员/超级用户使用单一集合。为所有管理员设置单独的集合是否合适?目前,我们有2000多名管理员,该名单可能会增长。

  2. 在Single Collection中,如何对子元素执行操作(排序,搜索,获取单列数据)并仅返回子元素列表?示例方法:

    DirectAgentDetailsMongoRecord [] findByAccountAndDirectAgentDetailsMongoRecordsName(Long account,String agentName);

0 个答案:

没有答案