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

查找字段值与输入数组的某些项匹配的mongodb文档

岳俊雅
2023-03-14

我有一个字符串列表,上面有一周中几天的日期。

String daysweek[] = ["10/05/2020", "11/05/2020", "12/05/2020", "13/05/2020", "14/05/2020", "15/05/2020", "16/05/2020" ]

我的目标是能够找到属于某个星期的几个文档。比较字段为“第一天”。

遵循数据库中文档结构的图像:

 Document insert = new Document().append("$elemMatch", daysweek[]);
       Document filterstar = new Document().append("id_motorista", idmotorista).append("pagamento", false).append("firstday", insert);

        coll.find(filterstar).projection(new Document().append("_id", 1).append("origem",1).append("destino", 1).append("formadepagamento", 1).append("valordaviagem",1)
                .append("notamotorista",1).append("pagamento",1).append("iniciodaviagem", 1).append("fimdaviagem",1).append("viagemcancelada", 1).append("horadaaceitacao",1)
                .append("horacancelamentomotorista", 1).append("horacancelamentousuario", 1).append("taxadecancelamento", 1).append("valordaviagemmotorista", 1).append("valordaviagemusuario", 1).append("id_acompanhamento",1)
                .append("taxaaplicativo", 1).append("taxacartao", 1).append("taxamotorista", 1)).sort(new Document().append("firstday", 1)).limit(100)
                .into(docs).addOnSuccessListener(new OnSuccessListener<List<Document>>() {
            @Override
            public void onSuccess(List<Document> documents) {}

但是搜索没有找到任何文件。预计查询数量将为35。

我想知道是否有任何方法可以通过给定的文档字段找到文档,匹配arraylist中的任何项。

共有2个答案

吴高洁
2023-03-14

@whoami的建议对我有用: D

所以我改变了部分代码。

我改变了这一点:

Document insert=新文档()。追加(“$elemMatch”,daysweek[])

为此:

Document insert=新文档()。附加(“$in”,daysweek[])

最终代码:

Document insert = new Document().append("$in", daysweek[]);
       Document filterstar = new Document().append("id_motorista", idmotorista).append("pagamento", false).append("firstday", insert);

        coll.find(filterstar).projection(new Document().append("_id", 1).append("origem",1).append("destino", 1).append("formadepagamento", 1).append("valordaviagem",1)
                .append("notamotorista",1).append("pagamento",1).append("iniciodaviagem", 1).append("fimdaviagem",1).append("viagemcancelada", 1).append("horadaaceitacao",1)
                .append("horacancelamentomotorista", 1).append("horacancelamentousuario", 1).append("taxadecancelamento", 1).append("valordaviagemmotorista", 1).append("valordaviagemusuario", 1).append("id_acompanhamento",1)
                .append("taxaaplicativo", 1).append("taxacartao", 1).append("taxamotorista", 1)).sort(new Document().append("firstday", 1)).limit(100)
                .into(docs).addOnSuccessListener(new OnSuccessListener<List<Document>>() {
            @Override
            public void onSuccess(List<Document> documents) {}

凤扬
2023-03-14

$elemMatch用于对数组字段进行查询,但是在您的场景中,您对字符串字段进行查询,并且输入是数组,那么您可以只使用$in运算符。

Mongo Shell语法:

db.collection.find({firstday : {$in : ["10/05/2020", "11/05/2020", "12/05/2020", "13/05/2020", "14/05/2020", "15/05/2020", "16/05/2020"]}})

测试:mongoplayground

 类似资料:
  • 来自< code>$elementMatch的MongoDB文档: $elemMatch运算符将包含数组字段的文档与至少一个与所有指定查询条件匹配的元素匹配。 但是,如何将包含数组字段的文档与与查询匹配的所有元素进行匹配? 例如,我有这样的文档: 我需要匹配所有具有所有 如果我使用以下查询: 该文档将被匹配,因为至少有一个价格 我也试过这个,但它似乎不工作: 有没有办法排除查看所有价格而不是至少一

  • 我和同事们有如下计划 所以我们想要的是所有在特定labID范围内匹配的文档,结果输出中只有在数组(“userlevels”)中匹配的字段。 比方说,如果我们想要集合中所有匹配的文档,范围在$gt 100到LT 200之间,那么应该有以下所需的输出。 我试过的 它会回复与lab_id(100到200)范围内的文档匹配的所有文档,但会在用户级别回复lab_id。

  • 问题内容: 我在具有以下映射的文档中有两个字段: 我如何找到所有与匹配的文档?禁用脚本是否有可能? 问题答案: 基本上,您需要使用脚本来执行此操作-即使由于完全将沙盒化了Lucene表达式而禁用了脚本,这也可能会起作用:

  • 问题内容: 我有一些文件: 我想要得到的结果,其匹配的任何值一样 在这种情况下,我想得到结果:一个数组: 我该怎么办?谢谢。 问题答案: 您应该看一下MongoDB 中的运算符。然后将它与find一起使用,以使您的请求更快,可以使用方法:使用它,mongoDB将返回JS对象而不是Mongoose模型/对象。 然后,您可以在结果数组上使用方法: 希望对您有帮助, 最好的问候

  • 我知道这是一个非常简单的问题,但我似乎找不到一个令人满意的答案。另外,我对Mongo完全是个新手。这显然无济于事。 假设我收藏了...我希望将mongo中的$toupper函数应用于具有_id和的记录的字段,而不是应用于具有的记录。 我一直在玩Mongo的聚合(针对我在google中发现的),但我得到的最多的是一个返回“name”字段的查询,但是: 它返回数据库中的所有记录(不仅是ObjectId

  • 问题内容: 我有多个带有字符串值的数组,我想比较它们,只保留 所有 它们之间相同的匹配结果。 给出以下示例代码: 我想产生以下数组,其中包含来自所有给定数组的匹配项: 我知道我可以将所有数组组合在一起,但这只是给我一个包含所有内容以及重复项的数组。是否可以轻松完成此操作而无需诸如underscore.js之类的库的开销? 编辑 我想我应该提到的是,可能存在未知数量的数组,我只是以3为例。 问题答案