1

我想查询所有用户组的 ID,其中管理员的 ID =“25160228446835585906563830293”或用户的 ID =“25160228446835585906563830293”。

这是 java obj 中的 hashmap 键值对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 ) 运算符来查找与您想要的列表匹配的admins ( )。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在哪里?adminsID

于 2013-03-26T13:30:58.643 回答