当前位置: 首页 > 知识库问答 >
问题:

mongo上数组的where子句不起作用

阳狐若
2023-03-14

我是新的mongodb,我有一个文档在我的db如下:

{“_id”:{“$oid”:“546e916cd38e0b3e0e79592f”},名称:“'hamed”,“实体:[“1”,“2”]}

现在我想阅读实体为[“1”,“2”]的aal文档,为此我尝试了以下代码:

MongoClient mongoClient = new MongoClient("localhost", 27017);
    DB db = mongoClient.getDB("test");
    Set<String> colls = db.getCollectionNames();
    DBCollection coll = db.getCollection("test");
    DBObject oredrFields = new BasicDBObject();
    oredrFields.put("entity", ":{ $in: ['1', '2'] } }");
    DBCursor cursor = coll.find(oredrFields);
    try {
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    } finally {
        cursor.close();
    }

但它不返回任何东西...有人能帮助我如何正确地写我的where子句吗?

共有2个答案

晏和风
2023-03-14

$in也应该是一个BasicDBObject:

DBObject oredrFields = new BasicDBObject();
DBObject inOp = new BasicDBObject();
inOp .put("$in", new String[]{"1","2"});
oredrFields.put("entity", inOp);
訾雅畅
2023-03-14

您需要将查询参数作为DBObject传递。您缺少$in运算符的DBObject

如果您只想要那些同时具有"1"和"2"的记录,您需要使用$all而不是$in,它只返回那些实体字段包含all元素的文档在传递的数组中。

    MongoClient mongoClient = new MongoClient("localhost", 27017);
    DB db = mongoClient.getDB("test");
    DBCollection coll = db.getCollection("test");
    DBObject oredrFields = new BasicDBObject();
    DBObject inQuery = new BasicDBObject().append("$all", new String[]{"1","2"});
    oredrFields.put("entity", inQuery);
    DBCursor cursor = coll.find(oredrFields);
    try {
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    } finally {
        cursor.close();
    }
 类似资料:
  • 问题内容: 我创建了一个包含3列的数据框:zip,lat,lng 我想选择zip = 00650的经纬度值 因此,我尝试使用: 但是它返回ArrayOutOfBound异常,因为它没有任何值。如果我删除where子句,它将运行良好。 有人可以解释我在做什么错吗? 更新: 数据框架构: 前10行是: 问题答案: 正如你可以在你的方案看是类型的,所以你的查询应该是这样的 更新: 如果您正在使用,则可以

  • 使用Query DSL和hibernate(Spring Data JPA)构建查询,如下所示 这里的逻辑很简单:如果有一个与某个人关联的银行帐户,则按银行ID过滤结果。 实体具有一个,它包含整数值。实体可能具有也可能没有

  • 在oracle数据库上似乎有很多查询语法来获取数据,这里我只想问一下运行良好的查询,但我完全不明白。查询如下: 从上面的查询来看,它的工作很好。但是我不明白为什么会有TO_DATE('01/01/197000:00:00','mm/dd/yyyy hh24:mi:ss和(create_date/(60*60*24)),'mm/dd/yy hh24:mi:ss') 有人能解释一下吗? 提前致谢

  • 本章提供了有关如何使用JDBC应用程序从表中选择记录的示例。 这将在从表中选择记录时使用WHERE子句添加其他条件。 在执行以下示例之前,请确保您具备以下示例 - 要执行以下示例,您可以使用实际用户名和密码替换用户名和密码。 您的MySQL或您正在使用的任何数据库已启动并正在运行。 所需的步骤 (Required Steps) 使用JDBC应用程序创建新数据库需要以下步骤 - Import the

  • 问题内容: 我有这个查询: 但是我想做这样的事情: 如何检查电子邮件是否存在?我要使用电子邮件,如果此字段为空,我要使用email2。我该如何完成? 问题答案: 用于选择字段,然后在其后放置该子句:

  • 问题内容: 我们得到错误-“ where子句不明确的列’CategoryID’”。 告诉我请怎么会好? 问题答案: 您得到的错误告诉您子句中的列是不明确的,这意味着系统存在标识适当列的问题,因为存在多个列。 为了解决此问题,请使用别名指定要用于子句的列: 我还更改了查询以获取相同的结果,但我没有使用+子句+子查询的组合,而是使用了子句。使用此查询,您只需定义一次所需的内容,它将自动获取每个子类别。