变量未定义 MongoDB $function

Variable not defined MongoDB $function

好吧,我很困惑。我正在尝试使用此处所述的 $function 运算符查找文档:S_function.

我的模特:

const newsSchema = new mongoose.Schema({
news_id: {
    type: mongoose.Schema.Types.ObjectId,
    unique: true,
    index: true
},
created_at: { type: String, default: Date.now().toString() },
updated_at: { type: String, default: Date.now().toString() },
Company_id: [{type: mongoose.Schema.Types.ObjectId}],
Stock_id: [{type: mongoose.Schema.Types.ObjectId}],
newsItem: {
    date: {type: String},
    title: { type: String },
    summary: { type: String },
    url: { type: String, unique: true },
    content: { type: String }
}
};

我的代码尝试:

newsModel.aggregate([
        {$match: {$function: {
            body: matchArrToArr(matchArr, Company_id),
            args: [ "$Company_id" ],
            lang: "js"
         }}}
    ])

matchArr 是我从周围函数传入的变量,Company_id 应该是数组 'Company_id' 来自新闻文件。但是,当我执行函数时,错误“Company_id is not defined”是 returned。这是有道理的,因为我没有定义它,但是如何将 Company_id 字段放入函数中。

我也尝试了 find($expr:{$function:...$where:...this.Company_id。第一种情况相同的错误。第二种情况 'this' 具有我调用 JS 函数的状态,而不是数据库文件。

我实际上想做的是:我想 return 所有文档,其中 Company_id 数组中的一个 ID 与我传入的 ID 之一匹配。如果有没有 $function 的更好的聚合方式,我对此持开放态度。但我也想了解我的 $function 表达式做错了什么。

谢谢!

这就是你想要的:

let someCompany_id = "60278ce8b370ff29b83226e7";

db.news.find(
    {
        $expr: {
            $function: {
                body: function(company_ids, someCompany_id) {
                    let _ids= company_ids.map(company_id => company_id.valueOf());
                    return _ids.includes(someCompany_id);
                },
                args: ["$company_id", someCompany_id],
                lang: "js"
            }
        }
    }
)

但这可以像这样轻松完成:

db.news.find({ 
    company_id: {
        $in: [someCompany_id]
    }
});

那么为什么要传递函数呢?