我有一个具有以下架构的集合-
const ContentSchema = new Schema({
label: {
type: String
},
itemId: {
type: Schema.ObjectId,
refPath: 'onModel'
},
formId: {
type: Schema.ObjectId,
refPath: 'onModel'
},
value: {
type: Schema.Types.Mixed,
index: "text"
},
}, { timestamps: true, versionKey: false });
以下是该Collection 可能拥有的一些示例文档-
{
_id: ObjectId('647b1538c29a553ad6e8f316'),
label: "Name",
itemId: ObjectId('647b1538c29a553ad6e8f313'),
formId: ObjectId('647b1538c29a553ad6e8f913'),
value: "ABC"
},
{
_id: ObjectId('647b1538c29a553ad6e8f416'),
label: "Email",
itemId: ObjectId('647b1538c29a553ad6e8f313'),
formId: ObjectId('647b1538c29a553ad6e8f913'),
value: "def@mail.com"
},
{
_id: ObjectId('647b1538c29a553ad6e8f516'),
label: "Name",
itemId: ObjectId('647b1538c29a553ad6e8f320'),
formId: ObjectId('647b1538c29a553ad6e8f913'),
value: "MNO"
},
{
_id: ObjectId('647b1538c29a553ad6e8f616'),
label: "Email",
itemId: ObjectId('647b1538c29a553ad6e8f320'),
formId: ObjectId('647b1538c29a553ad6e8f913'),
value: "xyz@mail.com"
}
现在,我需要执行一个查询,从包含formId
-ObjectId('647b1538c29a553ad6e8f913')
的集合中搜索"abc".
以下是执行此操作的代码-
return await ContentModel.aggregate([
{
$match: {
$text: { $search: text },
formId: new mongoose.Types.ObjectId(formId)
}
}]
上面的代码工作得非常好,并返回文档-
{
_id: ObjectId('647b1538c29a553ad6e8f316'),
label: "Name",
itemId: ObjectId('647b1538c29a553ad6e8f313'),
formId: ObjectId('647b1538c29a553ad6e8f913'),
value: "ABC"
}
但我需要同一聚合中的更多记录.现在,我需要从带有ItemID-ObjectId('647b1538c29a553ad6e8f313')
的文档中查找其他文档.
这样聚合现在应该返回2个文档-
{
_id: ObjectId('647b1538c29a553ad6e8f316'),
label: "Name",
itemId: ObjectId('647b1538c29a553ad6e8f313'),
formId: ObjectId('647b1538c29a553ad6e8f913'),
value: "ABC"
},
{
_id: ObjectId('647b1538c29a553ad6e8f416'),
label: "Email",
itemId: ObjectId('647b1538c29a553ad6e8f313'),
formId: ObjectId('647b1538c29a553ad6e8f913'),
value: "def@mail.com"
}
我正在try 以下查询,但不起作用-
return await ContentModel.aggregate([
{
$match: {
$text: { $search: text },
formId: new mongoose.Types.ObjectId(formId)
}
},
{
$match: { itemId: "$itemId" }
}]