@@ -4,25 +4,7 @@ import { Types } from 'mongoose';
44
55const ObjectId = Types . ObjectId ;
66
7- /**
8- * Convert object to dotted-key/value pair
9- * { a: { b: { c: 1 }}} -> { 'a.b.c': 1 }
10- * { a: { $in: [ 1, 2, 3] }} -> { 'a': { $in: [ 1, 2, 3] } }
11- * { a: { b: { $in: [ 1, 2, 3] }}} -> { 'a.b': { $in: [ 1, 2, 3] } }
12- * Usage:
13- * var dotObject(obj)
14- * or
15- * var target = {}; dotObject(obj, target)
16- *
17- * @param {Object } obj source object
18- * @param {Object } target target object
19- * @param {Array } path path array (internal)
20- */
21- export default function toMongoDottedObject (
22- obj : Object ,
23- target ?: Object = { } ,
24- path ?: string [ ] = [ ]
25- ) : { [ dottedPath : string ] : mixed } {
7+ function _toMongoDottedObject ( obj , target = { } , path = [ ] , filter = false ) {
268 const objKeys = Object . keys ( obj ) ;
279
2810 /* eslint-disable */
@@ -37,7 +19,7 @@ export default function toMongoDottedObject(
3719 } ;
3820 }
3921 } else if ( Object ( obj [ key ] ) === obj [ key ] && ! ( obj [ key ] instanceof ObjectId ) ) {
40- toMongoDottedObject ( obj [ key ] , target , path . concat ( key ) ) ;
22+ _toMongoDottedObject ( obj [ key ] , target , Array . isArray ( obj ) && filter ? path : path . concat ( key ) , filter ) ;
4123 } else {
4224 target [ path . concat ( key ) . join ( '.' ) ] = obj [ key ] ;
4325 }
@@ -50,3 +32,49 @@ export default function toMongoDottedObject(
5032 return target ;
5133 /* eslint-enable */
5234}
35+
36+ /**
37+ * Convert object to dotted-key/value pair
38+ * { a: { b: { c: 1 }}} -> { 'a.b.c': 1 }
39+ * { a: { $in: [ 1, 2, 3] }} -> { 'a': { $in: [ 1, 2, 3] } }
40+ * { a: { b: { $in: [ 1, 2, 3] }}} -> { 'a.b': { $in: [ 1, 2, 3] } }
41+ * { a: [ { b: 1 }, { c: 2 }]} -> { 'a.0.b': 1, 'a.1.c': 2 }
42+ * Usage:
43+ * var toMongoDottedObject(obj)
44+ * or
45+ * var target = {}; toMongoDottedObject(obj, target)
46+ *
47+ * @param {Object } obj source object
48+ * @param {Object } target target object
49+ * @param {Array } path path array (internal)
50+ */
51+ export function toMongoDottedObject (
52+ obj : Object ,
53+ target ?: Object = { } ,
54+ path ?: string [ ] = [ ]
55+ ) : { [ dottedPath : string ] : mixed } {
56+ return _toMongoDottedObject ( obj , target , path ) ;
57+ }
58+
59+ /**
60+ * Convert object to dotted-key/value pair
61+ * { a: { b: { c: 1 }}} -> { 'a.b.c': 1 }
62+ * { a: { $in: [ 1, 2, 3] }} -> { 'a': { $in: [ 1, 2, 3] } }
63+ * { a: { b: { $in: [ 1, 2, 3] }}} -> { 'a.b': { $in: [ 1, 2, 3] } }
64+ * { a: [ { b: 1 }, { c: 2 }]} -> { 'a.b': 1, 'a.c': 2 }
65+ * Usage:
66+ * var toMongoFilterDottedObject(obj)
67+ * or
68+ * var target = {}; toMongoFilterDottedObject(obj, target)
69+ *
70+ * @param {Object } obj source object
71+ * @param {Object } target target object
72+ * @param {Array } path path array (internal)
73+ */
74+ export function toMongoFilterDottedObject (
75+ obj : Object ,
76+ target ? : Object = { } ,
77+ path ?: string [ ] = [ ]
78+ ) : { [ dottedPath : string ] : mixed } {
79+ return _toMongoDottedObject ( obj , target , path , true ) ;
80+ }
0 commit comments