Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在所有文档的所有字段中应用大写字母(MongoDB-聚合)_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

在所有文档的所有字段中应用大写字母(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' } }])