MongoServerError:无效的$set :: 由 :: 引起,表达式$in正好接受 2 个参数。1 个被传入

MongoServerError: Invalid $set :: caused by :: Expression $in takes exactly 2 arguments. 1 were passed in

提问人:Md Nazmul Islam 提问时间:11/16/2023 最后编辑:Wernfried DomscheitMd Nazmul Islam 更新时间:11/17/2023 访问量:56

问:

{
    "offers" : [
        {
            "name" : "min",
            "prices" : [
               8, 15, 18
            ]
        },
        {
            "name" : "max",
            "prices" : [
               9, 11, 18
            ]
        }
    ],
    "nl" : [
        2, 4, 6, 7
    ]
}

更新聚合$in不起作用。我尝试了两种方式

[
    {
      $set: {
          offers: {
              $cond: {
                  if: {
                        "nl": {$in: [7]}
                  },
                   then: {
                          $concatArrays: ["$offers", []]
                      },
                  else: {
                        $concatArrays: ["$offers", [{
                                "name" : "minimal",
                                "prices" : []
                            }]]
                      }
              }
          }
      }
    },
   ]

下面的代码不起作用,也没有显示任何错误。

[
    {
      $set: {
          offers: {
              $cond: {
                  if: {
                        $in: ["$nl", 7]
                  },
                   then: {
                          $concatArrays: ["$offers", []]
                      },
                  else: {
                        $concatArrays: ["$offers", [{
                                "name" : "minimal",
                                "prices" : []
                            }]]
                      }
              }
          }
      }
    },
   ]

我想根据字段“nl”中 7 的 exi/stence 使用报价数组进行 cancat。请帮帮我。我正在尝试在 5 小时内解决这个问题。

mongodb mongoose mongodb 查询

评论


答:

0赞 Alex 11/17/2023 #1

聚合$in采用以下语法:(参见 MongoDb 文档)

{ $in: [ <expression>, <array expression> ] }

您需要反转$in条件。喜欢这个:

$in: [7, "$nl"]
0赞 jQueeny 11/17/2023 #2

我不确定您的预期结果是什么,但您需要将数字 7 作为第一个参数(有效表达式)传递,并将要比较的数组作为第二个参数(解析为数组的有效表达式)传递,如下所示:

{
    $set: {
      offers: {
        $cond: [
          {
            $in: [
              7,
              "$nl"
            ]
          },
          {
            $concatArrays: [
              "$offers",
              []
            ]
          },
          {
            $concatArrays: [
              "$offers",
              [
                {
                  "name": "minimal",
                  "prices": []
                }
              ]
            ]
          }
        ]
      }
    }
  }

有关工作示例,请参阅此处