我有一个类模型,它有字段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
与字段集合并匹配您的两个条件$limit
to result one document$match
FieldCollege
不为空[]
$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] }
}
}
]