在所有文档的所有字段中应用大写字母(MongoDB-聚合)
假设我有这样的文档:在所有文档的所有字段中应用大写字母(MongoDB-聚合),mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,假设我有这样的文档: [ { "one": "aaa", "two": "bbb", "three": "aba" }, { "one": "dd", "two": "cc", } ] 是否有一种方法(使用聚合)将函数应用于每个字段?像这样 db.collection.aggregate([ { '$project': { 'SOME FUNCTION TO UPPERCASE ALL THE FIELDS IN A ON
[
{
"one": "aaa",
"two": "bbb",
"three": "aba"
},
{
"one": "dd",
"two": "cc",
}
]
是否有一种方法(使用聚合)将函数应用于每个字段?像这样
db.collection.aggregate([
{
'$project': {
'SOME FUNCTION TO UPPERCASE ALL THE FIELDS IN A ONCE'
}
}
])
预期结果:
请试试这个:
db.collection.aggregate([{
/** Adding a new field data with required format */
$addFields: {
data: {
$arrayToObject: { // Convert back to object (Executes as final step in this addFields)
$map:
{
input: { $objectToArray: "$$ROOT" }, // Convert each document's keys as k,v pairs
as: "each",
/** Iterate over each document's keys & make values into upper case if k != _id */
in: { $cond: [{ $eq: ['$$each.k', '_id'] }, '$$each', { k: '$$each.k', v: { $toUpper: '$$each.v' } }] }
}
}
}
}
},
/** Replacing data as root document for each respective actual document */
{ $replaceRoot: { newRoot: '$data' } }])
测试:
参考:不错!我得到了它。谢谢
db.collection.aggregate([{
/** Adding a new field data with required format */
$addFields: {
data: {
$arrayToObject: { // Convert back to object (Executes as final step in this addFields)
$map:
{
input: { $objectToArray: "$$ROOT" }, // Convert each document's keys as k,v pairs
as: "each",
/** Iterate over each document's keys & make values into upper case if k != _id */
in: { $cond: [{ $eq: ['$$each.k', '_id'] }, '$$each', { k: '$$each.k', v: { $toUpper: '$$each.v' } }] }
}
}
}
}
},
/** Replacing data as root document for each respective actual document */
{ $replaceRoot: { newRoot: '$data' } }])