在我的MongoDB / Node后端设置中,我使用Studio 3T的管道运算符组合来创建特定视图。该管道中的一个步骤涉及使用$lookup
运算符从第二个集合中提取相关数据。此代码如下所示:
// Stage 3
{
$lookup: {
"from": "clients",
"localField": "client.id",
"foreignField": "_id",
"as": "client"
}
}
要将此作为对象而不是数组放入视图中,我将使用$unwind
运算符,如下所示:
// Stage 4
{
$unwind: {
path : "$client"
}
}
现在这样可行,因为来自其他集合的相应记录的信息完全落入视图我想要的位置。然而,问题是,当我真正需要的是来自该对象的三个项目时,这会从相应的记录中提取所有字段;即_id
和name.first
以及name.last
。
现在我得到这样的东西:
client: {
_id: someId,
prop1: value,
prop2: value,
prop3: value,
name: {
first: value,
last: value
}
prop4: value
}
当我需要的只是这个:
client: {
_id: someId,
name: {
first: value,
last: value
}
}
我查看了mongo文档,但我不清楚如何限制从$ lookup操作打印到视图的数据量。我是否需要在$ lookup操作中添加一些条件逻辑?或者是否还有其他一些操作员应该对管道进行处理?
答案 0 :(得分:1)
“重塑”输出文档听起来与使用$project管道阶段的方式非常相似。
在这种情况下,只需在$project阶段之后添加$lookup,它就应该符合目的。这是一个明显的方法。 像这样:
if let secIdentity = (dictionary as AnyObject).value(forKey: kSecImportItemIdentity as String) {
let securityError = SecIdentityCopyPrivateKey(secIdentity as! SecIdentity , &privateKeyRef)
if securityError != noErr {
privateKeyRef = nil
}
}