假设我有一系列相互关联的对象,如下所示:每个对象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游乐场