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

用Java实现数组对象字段值对记录的Mongo查询

黎阳冰
2023-03-14
{
"_id": "4bb131682d0682845098eabe",
"jobId": "1403610",
"refmdList": [
    {
        "_id": "4bb11af1f8d48284e0b2ef87",
        "addrIdx": 1,
        "type": "primary"
    }
],
"status": "Created in J4",
}
private DBCursor getRefMdCursor(String refId)
{
    DB db = JDatabase.getDatabase();
    BasicDBObject search = new BasicDBObject();
    search.put("refmdList._id", refId);

    DBCollection col = db.getCollection("jobs");
    DBCursor cur = col.find(search);
    return cur;
}

这非常慢,并且refmdlist._id没有索引。解决方案是索引这个数组对象字段以加快速度,还是上面的DBCursor代码有问题?

DBCursor类来自mongodb/mongo-java-driver/3.4.3/mongo-java-driver-3.4.3.jar

共有1个答案

楚洋
2023-03-14

可以对数组的子文档字段进行索引,这些索引称为多键索引。请参见带有嵌入文档的索引数组。

可以对字段refmdlist._id进行索引。它可以使用该字段作为筛选条件来提高查询的性能。

关于Java代码:

 类似资料:
  • 我在JOOQ中有一个查询,其中包含一个带有另一个表的左OUTER JOIN。这是有意的,因为不能保证相应的记录会存在,在这种情况下,我仍然希望从以前的表中检索值,并为缺失的字段提供默认值。 但是,由于带有默认参数的函数已被弃用,我如何检查字段是否包含空值? 使用字符串很容易,但布尔值只返回为,这意味着我无法检查它是否真的设置为false,或者它正是JOOQ决定返回的。 我试过: 但是这不起作用,因

  • 我在Rails3中的MongoDB数据库中有一个名为“Stat”的表。 在该表中,有一个名为“服务”的数组字段。 我尝试了各种各样的东西,并广泛地搜索了它,找到了一些线索,但似乎没有任何工作。我有四条记录应该与此查询匹配,但上面返回的是一个零集。 我想做的事情在Rails3/mongo中可能吗?

  • 我有以下模式- [名称:StringType,Grades:ArrayType(StructType(StructField(subject_grades),ArrayType(StructType(StructField(subject,StringType,false)),StructField(grade,LongType,false) 我想在数组中的subject字段上,该数组位于grad

  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

  • 问题内容: 情况:我收集了文档,每个文档都包含以下字段:“ _ id”(ObjectId),“ userId”(String),但也可以是字段“ files”(Object)。 当我这样做时: 结果,我得到了所有记录,这很好。 但是,当我这样做时,仅在“文件”字段存在的地方获取记录-结果是错误的。 是否由于我试图获取“对象”字段而发生错误?以及如何使用查询或条件解决此问题? 问题答案: 您可以构造

  • 问题内容: 我想检查一个是否包含一个具有特定值的字段的对象。现在,我可以使用一个循环来检查,但是我很好奇是否有更高效的代码。 类似的东西; 我知道上面的代码什么也做不了,只是为了大致演示一下我要实现的目标。 另外,为了澄清,我不想使用简单循环的原因是,这段代码当前将进入一个位于循环内的循环内。为了可读性,我不想一直在这些循环中添加循环。所以我想知道是否有简单的替代方案。 问题答案: Streams