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

如何基于文档中的两个数组元素返回文档?

吴哲
2023-03-14

我对mongodb中的聚合概念相对陌生。在我的文档中,有一个数组。我尝试用$match,$unwind,$group来提取数组中有两个给定值的文档。我猜写上去没什么帮助..这是样品

文件:

{Name:"Kal",    Class: "2", Subject: ["Physics", "English", "Maths"]},
{Name:"Matt",   Class: "1", Subject: ["Physics", "English"]},
{Name:"Kim",     Class: "1", Subject: ["Physics", "Spanish"]},
{Name:"Bud",    Class: "2", Subject: ["Physics", "German"]},
{Name:"Roger",  Class: "2", Subject: ["Physics", "French"]},
{Name:"Kate",   Class: "1", Subject: ["English"]}

从这些文档中,我需要提取一个具有“类:1”和“主题[”物理“,”英语“]的文档

所以,如果我正确地编写了查询(或聚合),我应该从上面提取第二个文档。

这是我所拥有的

db.Student.aggregate([{"$match": {"Class": "1",}},{"$unwind":    "$Subject"},{"$match": {"Subject": "Physics"}},{"$match": {"Subject": "English"}} ]).pretty()

好吧,上面的聚合没有给我任何反馈,所以我尝试使用$并将'物理'和'英语'结合起来,但是我得到了'$并且不是阶段运算符'错误。

我也尝试了下面的聚合,但我什么也没得到。

db.Student.aggregate([{"$match": {"Class": "1",}},{"$match": {"Subject": ["Physics", "English"]}} ]).pretty()

我该怎么做?

共有1个答案

阎宝
2023-03-14

不需要聚合框架即可执行此操作。只需使用 .find() 方法:

如果您想要那些“物理”和“英语”位于“主题”数组中的文档,则需要使用$all运算符。

db.Students.find( { "Subject": { "$all": [ "Physics", "English" ]  } } ) 

要返回仅存在这些主题的文档,您需要使用$size运算符。

db.Students.find( { "Subject": { "$all": [ "Physics", "English" ]  }, "Subject": { "$size": 2 } } ) 
 类似资料:
  • 主要集合是零售商,其中包含用于商店的数组。每个商店都包含一系列优惠(您可以在此商店购买)。这提供了具有数组大小的数组。(见下面的例子) 现在我试图找到所有的优惠,这是在大小。 我尝试了这个查询: 我期待这样的输出: 但是,我的查询的输出还包含与XS、X和M不匹配的offer。 如何强制MongoDB只返回符合我查询的报价? 问候和感谢。

  • 使用mongoose,我希望搜索具有特定属性的子文档并返回最近的一个。 给定一个特定的用户,我想搜索他们的s,查找他们的

  • 问题内容: 嗨,我的收藏集是这样的,我试图按日期的排序顺序获取特定blog_id的所有评论列表。 我想按日期的降序列出特定blog_id的所有评论,如下所示 我如何在mongooes或mongodb中做到这一点 我试过了 该查询提供了注释以及来自多个文档的所有相关注释,但是注释是随机的。$ sort不适用于我 先感谢您。 问题答案: 乔琳 试试这个: 根据您的样本数据,输出将是:

  • 给定对象数组: 如何构造查询,以便在DB中更新每个文档的名称字段,其中文档的id等于数组对象中的\u id? 这必须在单个查询中完成。查询必须使用mongoDB节点驱动程序语法。 例如:

  • 问题内容: 我想返回数组的奇数,但是Eclipse似乎不接受我的返回码。我认为这需要返回整个数组,因为我将数组设置为方法的参数。如前所述,我需要传递一个数组并获取该数组的特定元素作为回报。即使我将该数组设为静态,如何返回单个元素? 编辑:好吧,这里是: 我知道这里可能存在多个错误,但我正在努力,不仅要返回奇数,还要将它们加在一起。 问题答案: 您的代码应如下所示: 这里的要点是方法返回类型,它应该