2016-12-01 94 views
0

在我的Java Play框架应用程序中,我想将ArrayList值存储在mongoDB中。Arraylist中的Mongo DB查询

{ 
    "_id" : ObjectId("5832f29bd4c6721e4e8ba4a7"), 
    "_class" : "com.netas.innovation.entity.Idea", 
    "title" : "fsaf", 
    "desc" : "adgg", 
    "keyWords" : "dgds", 
    "createdDate" : ISODate("2016-11-21T13:11:55.823Z"), 
    "checkbox1" : false, 
    "checkbox2" : false, 
    "checkbox3" : false, 
    "scopeOfIdea" : "Herkes", 
    "template" : false, 
    "creatorUser" : { 
     "$ref" : "user", 
     "$id" : ObjectId("5832f27dd4c6721e4e8ba4a5") 
    }, 
    "owners" : [ 
     { 
      "$ref" : "user", 
      "$id" : ObjectId("5832f27dd4c6721e4e8ba4a5") 
     } 
    ], 
    "answer" : { 
     "$ref" : "answer", 
     "$id" : ObjectId("5832f29bd4c6721e4e8ba4a6") 
    }, 
    "fileList" : [] 
} 

我想在业主范围内进行搜索。

我查询不工作

if(owners != null && !owners.isEmpty()) { 

      for(int i=0; i<owners.size(); i++) { 
       criteriaList.add(new **Criteria().elemMatch(Criteria.where("owners.$id").is(owners.get(i).getId())));** 
      } 
     } 

我该怎么解决? 我可以搜索所有者。 业主可以是两个人或三个

感谢答案

+1

请添加更多的细节,比如你的架构和你预期的输出,它会在了解您所面临的问题是帮助。 –

回答

0
"owners" : [ 
    { 
     "$ref" : "user(list)", 
     "$id" : ObjectId("5832ecdb0deb78cc88392c83") 
    } 

$ REF:ozgurk,volkany ...

0

我不是一个MongoDB的专家,但我猜你应该做的somethink,如:

List<Criteria> criteriaList = new ArrayList<Criteria>(); 
... 
List idList = new ArrayList(); 
for (int i = 0; i < owners.size(); i++) { 
    idList.add(owners.get(i).getId()); 
} 
criteriaList.add(new Criteria().where("owners.$id").in(idList)); 
... 

如果您将每个owner = owners.get(i).getId()标准逐个添加到列表中,并最终将所有标准与AND操作组合在一起,您将无法获得所需的输出。

我猜你使用Spring数据。我试着写的MongoDB如下查询:

db.getCollection('idea').find(
    { 
      "owners.$id": { 
       "$in" : [ 
        ObjectId("58451c5f13c97bdde9950641"), 
        ObjectId("28451c5f13c97bdde9950642") 
       ] 
      } 
    } 
)