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

用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)。 当我这样做时: 结果,我得到了所有记录,这很好。 但是,当我这样做时,仅在“文件”字段存在的地方获取记录-结果是错误的。 是否由于我试图获取“对象”字段而发生错误?以及如何使用查询或条件解决此问题? 问题答案: 您可以构造

  • 我有以下 3 份文件。每个代表一个用户的联系人: 我需要通过数组元素对它们进行聚合/分组,这样我就可以识别重复的联系人(基于电子邮件id)。因为在文档(1 我尝试在java中使用$unwind和$group执行此操作,如下所示: 这按电子邮件ID对文档进行分组(这是正确的),但没有达到目的。 任何帮助都将不胜感激。 我需要实现的功能,用户可以在他的存储库可能重复的联系人提示。我需要聚合结果类似于: