【发布时间】:2021-05-29 13:00:29
【问题描述】:
好吧,我很困惑。我正在尝试使用 $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”。这是有道理的,因为我没有定义它,但是如何将 Company_id 字段放入函数中。
我也尝试了 find($expr:{$function:... 的结果相同,$where:... 的结果相同 this.Company_id 。第一种情况相同的错误。第二种情况 'this' 具有我调用 JS 函数的状态,而不是 DB 文档。
我实际上想要做的是:我想返回所有文档,其中 Company_id 数组中的一个 ID 与我传入的一个 ID 匹配。如果有更好的聚合方式而没有 $function,我是开放的到那个。但我也想了解我的 $function 表达式做错了什么。
谢谢!
【问题讨论】:
-
函数声明和函数调用是两个不同的this。您需要定义一个函数而不是调用它。 MongoDB 将调用您将其作为参数传递给
body属性的函数。不要调用matchArrToArr函数。用函数定义替换它。 -
尝试更新问题。如果还是不行,我会帮你的。
-
天哪,你是完全正确的,愚蠢的我。也许我的 3 天没有食物显示。非常感谢!
标签: javascript mongodb mongoose aggregation-framework aggregation