Mongoose:使用参数查询相关对象



假设我有一系列相互关联的对象,如下所示:每个对象A-类型都有字段b,它包含对象B-类型的某个实例的id。

// example of A type
const a = {
some: 'blablabla',
b: ObjectId('...')
};
// example of B type
const b = {
name: 'bla',
surname: 'blabla'
}

问题:那么,如何仅获取字段b包含具有特殊值字段的B-type对象的A类型实例?

例如:只获取具有字段some包含lorem并且与B相关的A类型的实例-具有name的对象包含ipsum

附言我试过这样的东西:

A.find({ some: 'lorem', 'b.name': 'ipsum' });

但它不起作用。

p.p.S.我根本不是后端开发人员。但我别无选择:(

您想要做的是使用$lookup(如果您知道的话,它相当于join的sql(。至";加入";2个系列。然后你可以像这样查询这两个对象:

db.a.aggregate([
{
$match: {
some: "lorem"
}
},
{
"$lookup": {
"from": "b",
"let": {
"bId": "$b"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$$bId",
"$_id"
]
},
{
$eq: [
"$name",
"ipsum"
]
}
]
}
}
}
],
"as": "B"
}
},
{
$match: {
"B.0": {
$exists: true
}
}
}
])

Mongo游乐场

最新更新