提问人:Md Nazmul Islam 提问时间:11/16/2023 最后编辑:Wernfried DomscheitMd Nazmul Islam 更新时间:11/17/2023 访问量:56
MongoServerError:无效的$set :: 由 :: 引起,表达式$in正好接受 2 个参数。1 个被传入
MongoServerError: Invalid $set :: caused by :: Expression $in takes exactly 2 arguments. 1 were passed in
问:
{
"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 小时内解决这个问题。
答:
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": []
}
]
]
}
]
}
}
}
有关工作示例,请参阅此处。
评论