想象一下,我有一系列彼此相关的对象,如下所示:每个对象A
-类型都有一个字段b
,其中包含对象B
-type的某些实例的ID
// example of A type
const a = {
some: 'blablabla',
b: ObjectId('...')
};
// example of B type
const b = {
name: 'bla',
surname: 'blabla'
}
问题:那么,如何仅获得其中字段A
包含b
对象和具有特殊值的字段的B-type
类型实例? / p>
例如:仅获取A
类型的实例,这些实例的字段some
包含lorem
,并且与B
类型的对象相关,其中name
包含ipsum
?
PS 。我已经尝试过类似的操作:
A.find({ some: 'lorem', 'b.name': 'ipsum' });
...但是它不起作用。
P.P.S。。我根本不是后端开发人员。但我别无选择:)
答案 0 :(得分:0)
您要使用的是$lookup(如果知道的话,它等效于join
的sql)。来“加入”这两个集合。那么您可以像这样查询两个对象:
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
}
}
}
])