You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							34 lines
						
					
					
						
							845 B
						
					
					
				
			
		
		
	
	
							34 lines
						
					
					
						
							845 B
						
					
					
				| 'use strict';
 | |
| 
 | |
| const _modifiedPaths = require('../common').modifiedPaths;
 | |
| 
 | |
| /**
 | |
|  * Given an update document with potential update operators (`$set`, etc.)
 | |
|  * returns an object whose keys are the directly modified paths.
 | |
|  *
 | |
|  * If there are any top-level keys that don't start with `$`, we assume those
 | |
|  * will get wrapped in a `$set`. The Mongoose Query is responsible for wrapping
 | |
|  * top-level keys in `$set`.
 | |
|  *
 | |
|  * @param {Object} update
 | |
|  * @return {Object} modified
 | |
|  */
 | |
| 
 | |
| module.exports = function modifiedPaths(update) {
 | |
|   const keys = Object.keys(update);
 | |
|   const res = {};
 | |
| 
 | |
|   const withoutDollarKeys = {};
 | |
|   for (const key of keys) {
 | |
|     if (key.startsWith('$')) {
 | |
|       _modifiedPaths(update[key], '', res);
 | |
|       continue;
 | |
|     }
 | |
|     withoutDollarKeys[key] = update[key];
 | |
|   }
 | |
| 
 | |
|   _modifiedPaths(withoutDollarKeys, '', res);
 | |
| 
 | |
|   return res;
 | |
| };
 |