问题描述
MongoDB中是否可以投影具有特定类型的文档的所有字段?
例如,如果我有以下文档:
{
_id: 5dde4c55c6c36b3bb4f5ad30,name: "Peter",age: 45,division: "marketing"
}
我想说:仅返回类型string
的字段。这样,我最终会得到:
{
_id: 5dde4c55c6c36b3bb4f5ad30,division: "marketing"
}
解决方法
您可以使用$type检查字段的类型,
-
$reduce
使用$$ROOT
输入$objectToArray
对象作为数组 - 检查条件,如果字段值类型为
string
,则将其与initialValue连接并返回 - 返回值将是数组,我们需要使用
$arrayToObject
将其转换为数组
-
$replaceWith
将根替换为新返回的对象
db.collection.aggregate([
{
$replaceWith: {
$arrayToObject: {
$reduce: {
input: { $objectToArray: "$$ROOT" },initialValue: [],in: {
$concatArrays: [
"$$value",{
$cond: [
{ $eq: [{ $type: "$$this.v" },"string"] },["$$this"],[]
]
}
]
}
}
}
}
}
])