MongoDB: 仅投影特定类型的字段
MongoDB: Project only fields of a specific type
MongoDB 中有没有一种方法可以投影具有特定类型的文档的所有字段?
例如,如果我有以下文档:
{
_id: 5dde4c55c6c36b3bb4f5ad30,
name: "Peter",
age: 45,
division: "marketing"
}
我想说:Return只有string
类型的字段。这样我最终会得到:
{
_id: 5dde4c55c6c36b3bb4f5ad30,
name: "Peter",
division: "marketing"
}
您可以使用$type检查字段类型,
$reduce
输入 $$ROOT
对象作为数组使用 $objectToArray
- 检查条件,如果字段值类型是
string
然后与 initialValue 和 return 连接
- return 值将是数组,我们需要使用
$arrayToObject
将其转换为数组
$replaceWith
将根替换为新的 returned 对象
db.collection.aggregate([
{
$replaceWith: {
$arrayToObject: {
$reduce: {
input: { $objectToArray: "$$ROOT" },
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$cond: [
{ $eq: [{ $type: "$$this.v" }, "string"] },
["$$this"],
[]
]
}
]
}
}
}
}
}
])
MongoDB 中有没有一种方法可以投影具有特定类型的文档的所有字段?
例如,如果我有以下文档:
{
_id: 5dde4c55c6c36b3bb4f5ad30,
name: "Peter",
age: 45,
division: "marketing"
}
我想说:Return只有string
类型的字段。这样我最终会得到:
{
_id: 5dde4c55c6c36b3bb4f5ad30,
name: "Peter",
division: "marketing"
}
您可以使用$type检查字段类型,
$reduce
输入$$ROOT
对象作为数组使用$objectToArray
- 检查条件,如果字段值类型是
string
然后与 initialValue 和 return 连接
- return 值将是数组,我们需要使用
$arrayToObject
将其转换为数组
$replaceWith
将根替换为新的 returned 对象
db.collection.aggregate([
{
$replaceWith: {
$arrayToObject: {
$reduce: {
input: { $objectToArray: "$$ROOT" },
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$cond: [
{ $eq: [{ $type: "$$this.v" }, "string"] },
["$$this"],
[]
]
}
]
}
}
}
}
}
])