变量未定义 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]
}
});
那么为什么要传递函数呢?
好吧,我很困惑。我正在尝试使用此处所述的 $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]
}
});
那么为什么要传递函数呢?