Mongodb查询(hashmap对象)

Mongodb查询(hashmap对象),mongodb,Mongodb,我想查询所有用户组的ID,其中管理员ID=“2516022844683558906563830293”或用户ID=“2516022844683558906563830293” 这是java obj中的hashmap键和值对hashmap “2516022844683558590663830293”:ISODate(“2013-03-26T04:51:36.731Z”) 如果您使用的是mongodb java驱动程序,则可以执行以下操作: BasicDBObject queryForAdmi

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

这是java obj中的hashmap键和值对
hashmap
“2516022844683558590663830293”:ISODate(“2013-03-26T04:51:36.731Z”)


如果您使用的是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

如果您使用的是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

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

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

    "admins" : [
        { id: "25160228446835585906563830293",
           date: ISODate("2013-03-26T04:51:36.731Z") }
     ],
这将使搜索更加自然:

db.so.find( { "admins.id" : 
    { $in: ['25160228446835585906563830293', 
            '25160228446835585906563830296']}})
您可以使用
$in
()操作符查找
admin
s,其
id
与您想要的列表匹配(
admins.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);

我建议您重新构造文档,使其可索引,并更易于在MongoDB中搜索

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

    "admins" : [
        { id: "25160228446835585906563830293",
           date: ISODate("2013-03-26T04:51:36.731Z") }
     ],
这将使搜索更加自然:

db.so.find( { "admins.id" : 
    { $in: ['25160228446835585906563830293', 
            '25160228446835585906563830296']}})
您可以使用
$in
()操作符查找
admin
s,其
id
与您想要的列表匹配(
admins.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);


好的,那你试过什么?仅供参考:如果密钥没有固定和索引,它将需要扫描所有文档。我对mongodb或任何NoSql db都是全新的,所以我可以索引“字符串”的中间部分吗?在JavaOBJ中,我知道这是一个键,但是mongodb如何知道这是一个键呢?好的,那么您尝试了什么?仅供参考:如果密钥没有固定和索引,它将需要扫描所有文档。我对mongodb或任何NoSql db都是全新的,所以我可以索引“字符串”的中间部分吗?在java obj中,我知道它是一个键,但是mongodb如何知道它是一个键呢?好的,但是我想从一列中查询251602284468355859090638302293呢?“admins”:{“25160228446835585905906563830293”:ISODate(“2013-03-26T04:51:36.731Z”),“251602284468355859506563830294”:ISODate(“2013-03-26T04:51:36.731Z”),“2516022868355859506563830295”:ISODate(“2013-03-26T04:51:36.731Z”)。然后您应该按照以下方式定义adminsID并传递到上面的代码。它会将所有数据返回给您。String adminsID=“2516022844683558590653830293”好的,谢谢,我们将尝试这样做,那么可以使用一个查询而不是两个查询吗?对于一个查询中的管理员和用户?我以前只执行了单个查询,但您可以尝试将它们添加到单个BasicDBObject中,然后尝试进行查询。。但是它将是一个AND查询,而不是OROk,但是我想从一列查询251602284468355859090653830293怎么样?“admins”:{“25160228446835585905906563830293”:ISODate(“2013-03-26T04:51:36.731Z”),“251602284468355859506563830294”:ISODate(“2013-03-26T04:51:36.731Z”),“2516022868355859506563830295”:ISODate(“2013-03-26T04:51:36.731Z”)。然后您应该按照以下方式定义adminsID并传递到上面的代码。它会将所有数据返回给您。String adminsID=“2516022844683558590653830293”好的,谢谢,我们将尝试这样做,那么可以使用一个查询而不是两个查询吗?对于一个查询中的管理员和用户?我以前只执行了单个查询,但您可以尝试将它们添加到单个BasicDBObject中,然后尝试进行查询。。但是,这将是一个AND查询,而不是ORTHANK。为了获得帮助,我必须研究如何为spring数据创建自己的自定义转换器。如果我想向上插入admin字段,该怎么办?例如,如果管理员不存在,我想编辑日期或添加带有日期的新管理员字段?@Ryan_DS-请提出新问题。这个答案已经有将近7年的历史了。感谢您的帮助,我将不得不研究如何为spring数据制作自己的自定义转换器。如果我想升级到admin字段,该怎么办?例如,如果管理员不存在,我想编辑日期或添加带有日期的新管理员字段?@Ryan_DS-请提出新问题。这个答案已经有将近7年的历史了。