2013-07-31 4 views
0

내 샘플 문서 내가 사용자가 입력 한 사용자 배열 _ 이름 및 암호와 일치하는 것을 시도하고있다몽고 자바 몽고 배열에 Maching 기록을 찾는

{ 
    "_id" : ObjectId("51f89c1484ae3aa758ad56e9"), 
    "group_name" : "Operator", 
    "privileges" : [ 
     "Add Group", 
     "Edit/Delete Group", 
     "Add User", 
     "Edit/Delete User", 
     "Log History", 
     "Add Stopwords Group", 
     "Edit/Delete Stopwords Group", 
     "Add Stopwords", 
     "Edit/Delete Stopwords", 
     "Recomended Stopwords" 
    ], 
    "users" : [ 
     { 
      "full_name" : "operator1", 
      "user_name" : "operator", 
      "password" : "pass$123", 
      "status" : "Active" 
     }, 
     { 
      "full_name" : "Sumit Dshpande", 
      "user_name" : "dsumit", 
      "password" : "pass$123", 
      "status" : "Active" 
     } 
    ] 
} 

입니다.

내 자바 코드는 다음과 같습니다

BasicDBObject query = new BasicDBObject(); 
List<BasicDBObject> parts = new ArrayList<BasicDBObject>(); 
parts.add(new BasicDBObject("users.user_name", uname)); 
parts.add(new BasicDBObject("users.password", password)); 
query.put("$and", parts); 

DBCursor cursor = collection.find(query); 
while (cursor.hasNext()) { 
    System.out.println(cursor.next()); 
} 

을하지만 그룹의 권한을 변경할 수 있도록 그룹에서 모든 array.I 일치의 사용자 원하는 사용자를 반환합니다. nosql에서 스키마를 설계하는 올바른 방법입니다.

+0

당신이 예상되는 출력의 예를 들어 줄 수 있을까? –

+0

그룹 권한을 변경하면 전체 그룹에 대한 권한이 변경됩니다. 이 경우 왜 사용자 이름과 비밀번호로 특정 사용자를 원하십니까? 콜렉션을 구성한 방법에 문제가있는 것처럼 보입니다. 필요한 것에 대해 더 많은 정보를 추가하십시오. – Jayz

답변

0

적절한 모델링 결정을 내릴 지 여부를 알려면 응용 프로그램에 대한 포괄적 인 정보가 필요합니다. 그러나 현재 검색어로 도와 드릴 수 있습니다.

배열의 같은 요소에서 여러 속성을 일치 시키려면 $ elemMatch 연산자 (http://docs.mongodb.org/manual/reference/projection/elemMatch/)를 사용해야합니다.

예)

collection.find({users:{$elemMatch:{username:uname,password:password}}});