MongoDb只在$lookup cond发生时返回记录



我有一个类模型,它有字段ref.

我试图只获取符合查找条件的记录。

我所做的:


{
$lookup: {
from: 'fields',
localField: "field",
foreignField: "_id",
as: 'FieldCollege',
},
},
{
$addFields: {
"FieldCollege": {
$arrayElemAt: [
{
$filter: {
input: "$FieldCollege",
as: "field",
cond: {
$eq: ["$$field.level", req.query.level]
}
}
}, 0
]
}
}
},

上面的代码运行良好,如果cond匹配,则返回FieldCollege

但事情是,我想返回类记录只有当FieldCollege不是空的。

我对mongodb完全陌生。所以我尝试这样做:

{
$match: {
'FieldCollege': { $exists: true, $ne: [] }
}
},

显然这行不通。

mongodb支持这样的东西还是我使事情复杂化?

编辑:

上面代码的结果:

"Classes": [
{
"_id": "613245664c6ea614e001fcef",
"name": "test",
"language": "en",
"year_cost": "3232323",
"FieldCollege":[] // with $unwind
}
],

预期结果:

"Classes": [
// FieldCollege is empty 
],

我认为最好的选择是使用管道查找,并查看您的查询的最终版本,

  • $lookup与字段集合并匹配您的两个条件
  • $limitto result one document
  • $matchFieldCollege不为空[]
  • $addElemAt从结果FieldCollege中获取第一个元素
[
{
$lookup: {
from: "fields",
let: { field: "$field" },
pipeline: [
{
$match: {
$and: [
{ $expr: { $eq: ["$$field", "$_id"] } },
{ level: req.query.level }
]
}
},
{ $limit: 1 }
],
as: "FieldCollege"
}
},
{ $match: { FieldCollege: { $ne: [] } } },
{
$addFields: {
FieldCollege: { $arrayElemAt: ["$FieldCollege", 0] }
}
}
]

最新更新