查找文档及其引用的文档
我在尝试使用mongodb中的聚合管道填充相关字段时遇到麻烦,普通关系也起作用(我的意思是在其他集合中对oid的oid引用),但是当您有一个对象数组,其属性之一引用了a时会发生什么子文档。如果我不清楚,请在此处稍作介绍。
假设我具有以下架构:
Profile {
_id: {
type: mongoose.Schema.Types.ObjectId
},
Gender: {
type: mongoose.Schema.Types.ObjectId,
ref: "Gender"
},
PhoneNo: [
Value: {
type: String
},
PhoneType: {
type: mongoose.Schema.Types.ObjectId,
ref: "PhoneType"
}
]
}
PhoneType {
_id: {
type: mongoose.Schema.Types.ObjectId
},
Name: {
type: String
}
}
Gender {
_id: {
type: mongoose.Schema.Types.ObjectId
},
Name: {
type: String
}
}
所以,我想得到类似的结果:
{
_id: $oid,
Gender: {Value:"Masculine"},
PhoneNo: {
Value: "000000",
PhoneType: {
_id: $oid
Name: "Cell"
}
}
},
{
_id: $oid,
Gender: {Value:"Feminine"},
PhoneNo: {
Value: "999999",
PhoneType: {
_id: $oid
Name: "Work"
}
}
}
Gender中的查找效果很好,但是当我尝试查找PhoneNo时,我丢失了[[value属性。
我得到的是:失去对字段/属性的关注,]。>值
{
_id: $oid,
Gender: {Value:"Masculine"},
PhoneNo: [{
PhoneType: {
_id: $oid
Name: "Cell"
}
}]
},
{
_id: $oid,
Gender: {Value:"Feminine"},
PhoneNo: [{
PhoneType: {
_id: $oid
Name: "Work"
}
}]
}
这是我使用的代码:
{
from: 'PhoneType',
'let': {"ids":"$PhoneNo.PhoneType"},
"pipeline": [
{ "$match": { "$expr": { "$in": ["$_id", "$$ids"] } } },
],
as: "PhoneNo"
}
我该怎么做? :S
[我在尝试使用mongodb中的聚合管道填充相关字段时遇到了麻烦,普通关系也起作用(我的意思是其他集合中对oid的oid引用),但是当您...时会发生什么...
回答如下:所以这是您遇到的问题的演练,我们还在lookup let声明中包含Values,因为它将存储在数组中,并且在项目阶段,我们将获取indexOf Values数组,其中$$ ROOT的id和ID匹配