gpt4 book ai didi

arrays - $in 需要一个数组作为第二个参数,找到 : missing

转载 作者:可可西里 更新时间:2023-11-01 09:09:15 27 4
gpt4 key购买 nike

有人可以告诉我我做错了什么吗?

数据库文件结构:

{
"_id" : "module_settings",
"moduleChildren" : [
{
"_id" : "module_settings_general",
"name" : "General",
},
{
"_id" : "module_settings_users",
"name" : "Users",
},
{
"_id" : "module_settings_emails",
"name" : "Emails",
}
],
“permissions” : [
"module_settings_general",
"module_settings_emails"
]
}

流水线阶段:

{ $project: {
filteredChildren: {
$filter: {
input: "$moduleChildren",
as: "moduleChild",
cond: { $in : ["$$moduleChild._id", "$permissions"] }
}
},
}}

我需要过滤“moduleChildren”数组以仅显示 ID 在“permissions”数组中的模块。我试过“$$ROOT.permissions”和“$$CURRENT.permissions”但它们都不起作用。我总是收到 $in 缺少数组作为参数的错误。当我像这样对数组进行硬编码时它起作用了:cond: { $in : ["$$moduleChild._id", [“module_settings_general”, "module_settings_emails”]] } 所以问题似乎出在数组的传递。感谢您的任何建议!

最佳答案

第一个选项 --> 使用聚合

因为您集合中的某些文档可能包含也可能不包含 permissions 字段或者类型不等于数组,这就是您收到此错误的原因。

您可以找到 $type字段,如果它不是数组或不存在于您的文档中,则可以使用 $addFields 将其添加为数组和 $cond聚合

db.collection.aggregate([
{ "$addFields": {
"permissions": {
"$cond": {
"if": {
"$ne": [ { "$type": "$permissions" }, "array" ]
},
"then": [],
"else": "$permissions"
}
}
}},
{ "$project": {
"filteredChildren": {
"$filter": {
"input": "$moduleChildren",
"as": "moduleChild",
"cond": {
"$in": [ "$$moduleChild._id", "$permissions" ]
}
}
}
}}
])

第二个选项 -->

在您正在使用的任何 GUI 上转到您的 mongo shell 或 robomongo 并运行这个命令

db.collection.update(
{ "permissions": { "$ne": { "$type": "array" } } },
{ "$set": { "permissions": [] } },
{ "multi": true }
)

关于arrays - $in 需要一个数组作为第二个参数,找到 : missing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642472/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com