MongoDB 查询 - $condition 按数组中的元素

我有以下聚合管道,由单个 $redact: { $cond: [ { $gt: ["$sales","$productInfo.0.stock"] },"$$KEEP","$$PRUNE" ] } 步骤组成: (应该返回记录的销售数量超过库存的所有产品)

{
   _id: 123,sales: 60,price: 80,productInfo: [
      {
         stock: 100
      }
   ]
}

(上面的语法特定于 Compass,所以这里没有问题)

实体看起来像:

$productInfo.0.stock

但是,上面的查询似乎不起作用。我的假设是该问题是由与 price 的比较引起的,因为将其替换为实体的另一个直接属性(例如 $cond)运行没有任何问题。

应该如何指定这样的查询($gt by {{1}},其中一个值来自数组/列表)?

liu_xian_fu 回答:MongoDB 查询 - $condition 按数组中的元素

productionInfo.0.stock 语法是 Mongo 查询语言 (MQL),可用于 $matchfind

在使用聚合语法(例如 "$fieldName")时,该特定构造不可用。相反,您需要使用 $arrayElemAt,但遗憾的是它不支持访问引用元素中的字段。

要获得您想要的内容,您需要在前一阶段添加一个字段,该字段从数组中检索所需元素,在 $redact 中引用该对象,然后投影出临时字段,例如:>

{$addFields: {firstProduct: {$arrayElemAt: [ "$productInfo",0 ]}}},{$redact:{
  $cond: [
    { $gt: ["$sales","$productInfo.0.stock"] },"$$KEEP","$$PRUNE"
  ]
}},{$project: {firstProduct: 0}}
本文链接:https://www.f2er.com/9956.html

大家都在问