1

I want to query all the UserGroup's ID where admins's ID="25160228446835585906563830293" or users's ID ="25160228446835585906563830293".

this is a hashmap key and value pair in java obj hashmap<String,Date> "25160228446835585906563830293" : ISODate("2013-03-26T04:51:36.731Z")

{ "_id" : ObjectId("51512958849ca4748271c640"), 
  "_class" : "com.pcd.app.model.UserGroup", 
  "groupName" : "sdfsadfsad", 
  "privacyType" : "PRIVACY_OPEN", 
  "approvalType" : "MEMBER_APPROVAL", 
  "groupDescription" : "test", 
  "admins" : { 
      "25160228446835585906563830293" : ISODate("2013-03-26T04:51:36.731Z"),
      "25160228446835585906563830294" : ISODate("2013-03-26T04:51:36.731Z"),
      "25160228446835585906563830295" : ISODate("2013-03-26T04:51:36.731Z") 
  },
  "users" : { 
      "25160228446835585906563830296" : ISODate("2013-03-26T04:51:36.731Z") 
  } 
}
4

2 に答える 2

5

ドキュメントを再構築して、インデックス付け可能にし、MongoDB でより簡単に検索できるようにすることをお勧めします。

idのをadminフィールドとして使用する代わりに、それぞれadminを配列のオブジェクトとして追加します。

    "admins" : [
        { id: "25160228446835585906563830293",
           date: ISODate("2013-03-26T04:51:36.731Z") }
     ],

これにより、検索がより自然になります。

db.so.find( { "admins.id" : 
    { $in: ['25160228446835585906563830293', 
            '25160228446835585906563830296']}})

$in( docs ) 演算子を使用して、必要に応じてリストに一致するadminを持つ sを探すことができます ( )。idadmins.id

したがって、 Java を指定すると、次のQueryBuilderようになります。

BasicDBList adminIds = new BasicDBList();
adminIds.addAll(ids); // the ids could be a List<String> 
DBObject inClause = new BasicDBObject("$in", adminIds);
DBObject query = new BasicDBObject("admins.id", inClause);

ensureIndexインデックス ( docs ) を作成するために使用したい場合があります。

元の例に基づいて、参照用の完全なドキュメントを次に示します。

{ 
    "_id" : ObjectId("51512958849ca4748271c640"), 
    "_class" : "com.pcd.app.model.UserGroup", 
    "groupName" : "sdfsadfsad", 
    "privacyType" : "PRIVACY_OPEN", 
    "approvalType" : "MEMBER_APPROVAL", 
    "groupDescription" : "test", 
    "admins" : [
        { id: "25160228446835585906563830293" ,
          date: ISODate("2013-03-26T04:51:36.731Z") },
        { id: "25160228446835585906563830294" , 
          date:  ISODate("2013-03-26T04:51:36.731Z") },
        { id: "25160228446835585906563830295" , 
          date: ISODate("2013-03-26T04:51:36.731Z") } 
    ],
    "users" : [
        { id: "25160228446835585906563830296", 
          date : ISODate("2013-03-26T04:51:36.731Z") }
    ]
}
于 2013-03-26T17:06:18.807 に答える
0

mongodb Java ドライバーを使用している場合は、次のことができます。

   BasicDBObject queryForAdminsID = new BasicDBObject("admins." + adminsID, new BasicDBObject("$exists", true));  
// BasicDBObject queryForUsersID = new BasicDBObject("users." + usersID, new BasicDBObject("$exists", true));
cursor = coll.find(query); // coll is a DBCollection

try {
while(cursor.hasNext()) {
   System.out.println(cursor.next());
}
} finally {
 cursor.close();
}

usersIDあなたのadminsIDIDはどこですか

于 2013-03-26T13:30:58.643 に答える