2016-12-01 148 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") 
       ] 
      } 
    } 
)