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

MongoDB,如何将查找和排序与聚合中的$cond结合起来?

钱经赋
2023-03-14

我写了一个查找查询,它的工作,查找查询返回记录的名称和级别存在

db.docs.find( { $and: [{name:{$exists:true}},{level:{ $exists:true}} ] },{_id:0, name:1}).sort({"name":1})

现在想把它和下面的代码结合起来,下面的代码也可以工作,但是需要和上面的代码合并来提取正确的数据

db.docs.aggregate(
   [
      {
         $project:
           {
             _id:0,
             name: 1,
             Honours:
               {
                 $cond: { if: { $gte: [ "$level", 8 ] }, then: "True", else: "False" }
               }
           }
      }
   ]
)

find查询返回name和level存在的记录,但我需要使用名为honors的新列来增强结果,根据级别是否为gte(大于或等于8),显示True或False

所以我基本上是在尝试结合上面的查找过滤器和$cond函数(我在这里找到并修改了示例:$cond)

我尝试了下面的和其他一些排列,尝试使用$project和$cond聚合进行查找和排序,但它返回了错误。我只是对如何构造mongodb语法以使其相互配合非常陌生。有人能帮忙吗?

db.docs.aggregate(
   [{{ $and: [{name:{$exists:true}},{level:{ $exists:true}} ] },{_id:0, name:1}).sort({"name":1}
      {
         $project:
           {
             _id:0,
             name: 1,
             Honours:
               {
                 $cond: { if: { $gte: [ "$level", 8 ] }, then: "True", else: "False" }
               }
           }
      }
}
   ]
)

共有1个答案

周和歌
2023-03-14

尝试以下聚合管道:

db.docs.aggregate([
  /** $match is used to filter docs kind of .find(), lessen the dataset size for further stages */
  {
    $match: {
      $and: [{ name: { $exists: true } }, { level: { $exists: true } }]
    }
  },
  /** $project works as projection - w.r.t. this projection it will lessen the each document size for further stages */
  {
    $project: {
      _id: 0,
      name: 1,
      Honours: {
        $cond: { if: { $gte: ["$level", 8] }, then: "True", else: "False" }
      }
    }
  },
  /** $sort should work as .sort() */
  { $sort: { name: 1 } }
]);
 类似资料:
  • 我有包含以下模式的文档的集合。我想过滤/查找所有包含性别女性的文档并汇总大脑评分的总和。我尝试了下面的语句,它显示了无效的管道错误。 架构:

  • 但在我看来不对。有人能建议别的方法做这件事吗。

  • 问题内容: 如何将2个查询的结果按日期排序? table1,table2具有相同的字段: PS:顺便说一句,标签是 问题答案: 您可以用来从两个表中获取行: 您可能还需要考虑重组数据库,以便代替使用两个表,而只使用一个表和一个字段来区分每一行的类型。然后,查询可以简化为:

  • 问题内容: 我试图实现使用中去(golang)我的MongoDB查询的一个功能氧化镁包。 以下是我的收藏: 资料夹: 文件: 以下是我编写的在外壳程序上成功运行的查询: 如果我在外壳上运行此脚本,则会得到所需的结果。基本上,集合会返回给我,其中包含通过链接的全部相关内容。我不在这里包括它,因为这个问题似乎已经太久了。 我试图将此查询转换为 mgo 能够解析和执行的内容。在下面的go代码中: 我总是

  • 我是聚合框架的新手,有以下问题。 我的收藏是这样的: 用户 ActivitiesFeed 活动 聚合函数 如何使用第一个查找结果进行查找? 我查阅了activities集合。此集合保存第二个查找BaseData.UserID的id。但是使用这种方法,第二次查找没有结果。 我对activities集合进行连接的原因是actionID可以保存来自另一个集合的用户id或文档id。它取决于activiti

  • 问题内容: 我有一个聚合管道,其中包括一个像这样的项目: 在mongo shell中可以正常工作。如何在Spring-Mongodb中使用Aggregation框架表达这一点?我见过ProjectionOperationBuilder,ExpressionProjectionOperationBuilder类型,但没有一个示例如何使用它们……有什么建议吗? 问题答案: 如果使用通过管道支持操作员的