【问题标题】:Mongo Database, SELECT * WHERE id = 3 AND id = 4Mongo 数据库,SELECT * WHERE id = 3 AND id = 4
【发布时间】:2011-07-24 11:38:58
【问题描述】:

我有一个 MongoDB,我想获取两条或更多条记录并将其放入地图中。 如果我只有一个query.put(ïd", "7");,下面的代码可以正常工作,但如果我像下面的代码一样输入两个或更多,它就不起作用了。

    Map<Object,Object> map= new HashMap<Object,Object>();
    DBCollection collection = database.getCollection("Members");
    BasicDBObject query = new BasicDBObject();
    query.put("id", "7");
    query.put("id", "3");
    DBCursor cursor = collection.find(query);
    DBObject one;
    while(cursor.hasNext()) {
        one = cursor.next();
        map.put(one.get("id"),one.get("name"));
    }

我将如何获得地图中的两条或更多记录? 对于 SQL,等效值为 SELCT * FROM Member WHERE id = 7 AND id = 3

如果我可以给出一个列表作为查询,那就更完美了,不确定这是否可能。

【问题讨论】:

  • 一个 id 7 和 id 3 的帖子?您的意思是帖子应该有 id 3 id 7,而不是两者。
  • 从你的最后一句话来看,我认为你要发布的SQL是SELECT * FROM Member WHERE id IN ( 7, 3 )。请编辑问题以使用正确的等效 SQL,即实际上会返回一些行的东西。
  • 在那条query.put 声明中,您复制/粘贴了吗?这应该是id 中的标准i 吗? id 不应该同时打开和关闭“吗?请复制/粘贴这些内容,而不是输入代码中的“类似”。
  • 在结果中我想要两条记录,其中 id = 3 和 id = 4
  • @Marc:术语是“或”,而不是“和”。您想检索id 为3 7 的记录。考虑一下如果您说要检索带有id 3 和name“foo”的记录是什么意思。你的意思是只有那些 both 都是真的记录,对吧?所以没有记录可能匹配“id 是 3 和 7”(除非id 是某种多值字段或其他东西)。

标签: java mongodb mongo-java


【解决方案1】:

我想你想要$in operator,类似于:

Map<Object,Object> map= new HashMap<Object,Object>();
DBCollection collection = database.getCollection("Members");
BasicDBObject query = new BasicDBObject();
query.put("id", new BasicDBObject("$in", new Integer[] {3, 7}));
DBCursor cursor = collection.find(query);
DBObject one;
while(cursor.hasNext()) {
    one = cursor.next();
    map.put(one.get("id"),one.get("name"));
}

...假设值为Integers。我认为支持数组和BasicDBList 实例。

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 2022-01-03
    • 2018-02-06
    • 2014-06-17
    • 2017-09-27
    • 1970-01-01
    • 2023-03-20
    • 2014-01-27
    相关资源
    最近更新 更多