Mongodb查询(hashmap对象)

时间:2013-03-26 07:37:15

标签: mongodb

我想查询所有UserGroup的ID,其中admins的ID =“25160228446835585906563830293”或用户的ID =“25160228446835585906563830293”。

这是java obj hashmap<String,Date>中的hashmap键和值对 "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") 
  } 
}

2 个答案:

答案 0 :(得分:2)

我建议您重新构建文档,使其在MongoDB中可编入索引并更容易搜索。

不是使用id的{​​{1}}作为字段,而是将每个admin添加为数组的对象:

admin

这将使搜索更自然:

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

您可以使用db.so.find( { "admins.id" : { $in: ['25160228446835585906563830293', '25160228446835585906563830296']}}) docs)运算符查找$inadmin与您想要的列表匹配id) 。

因此,给定Java admins.id,它可能看起来像这样:

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); 来构建索引(docs)。

根据您的原始示例,以下是完整文档供参考:

ensureIndex

答案 1 :(得分: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();
}

其中usersIDadminsID是您的ID