我想查询所有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")
}
}
答案 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)运算符查找$in
,admin
与您想要的列表匹配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();
}
其中usersID
和adminsID
是您的ID