So I am trying to create map reduce aggregation functions. Since I need to aggregate on multiple dimensions, I don't want to copy/paste map and reduce function and only change the dimension from one to another.
// the map function
var map = function() {
var dimension = this[dimension] ? this[dimension] : "_";
var key = this.inst + "|" + this.bar + "|" + dimension;
var result = {hit: 1};
emit(key, result);
};
// the statement to call mapreduce
db.foo.mapReduce(map, reduce, {
out: {inline: 1},
query: q,
scope: {dimension: "red"}});
I run the above map reduce and found the dimension is always empty unless I noticed that dimension is redefined in the map function. Change the map funciton to the following solves the problem:
// the map function
var map = function() {
var d= this[dimension] ? this[dimension] : "_"; // changed
var key = this.inst + "|" + this.bar + "|" + d; // changed
var result = {hit: 1};
emit(key, result);
};
The exception pops up when I've updated a model class, and it won't go away unless I've restart my play app. Crazy!
Initially it looks like it's a problem of PlayMorphia, and I was thinking it is a PlayMorphia problem because I've just added an new feature allow processing @Converters annotation intelligently. I've tried to switch back to previous version and I found it's still there! And rewind to the version before previous version, it's even still there!
Finally I found it's caused by a recent updates to PlayRythm. Specifically the following code:
And the problem has gone when I changed it to
So obviously I need to reconfigure the Rythm Engine in dev mode even when the engine has been configured and initialized during pre-compilation process.
This is very strange and I've still no idea on why it happens
I suddenly come into the trouble that I cannot start play on my project. Here is the error message:
Traceback (most recent call last):
File "j:\play\play", line 143, in <module>
cmdloader.load_play_module(module)
File "j:\play\framework\pym\play\cmdloader.py", line 31, in load_play_module
if os.path.exists(commands):
File "j:\play\python\lib\genericpath.py", line 18, in exists
st = os.stat(path)
TypeError: stat() argument 1 must be (encoded string without NULL bytes), not str
I tried to do play clean but it got the same problem. I was very annoyed and even restart the machine, the same result!!!!
And when I come to other project it was all good. So I realized that something is run with this project instead of my system. I add a "print path" statement in the genericpath.py, and it prints out this sequences:
c:\w\_lgl\play-morphia
c:\w\_lgl\play-morphia\samples-and-tests\unit-tests\modules
j:\play\modules\crud\commands.py
K-*╬╠¤│R0È3ÓÕr,J╬╚,K-õñVö▬+└$x╣£ïR‼KRStØ*üz╠¶♀tô♀ì§4éK¾¶|3ôï‗ï+ïKRsï§<¾Æ§4y╣x╣ PK♥♦
♦ì⌂< META-INF/PK♥♦¶ K½~<♥ yR♠☻ T♠ - net/sf/oval/collection/CollectionFactory.java┼S┴j▄0►=»┴ 0Ã$deoáùñöäðÊʶB↕z▼╦│Â↕Y2Æ╝ï)²¸Äõf‼¿│öÆÂ:YofÌ╝y#↨G»{‗♀ÄÓ┌║á¼± ↔aá\commands.py
Traceback (most recent call last):
File "j:\play\play", line 143, in
cmdloader.load_play_module(module)
File "j:\play\framework\pym\play\cmdloader.py", line 31, in load_play_module
if os.path.exists(commands):
File "j:\play\python\lib\genericpath.py", line 19, in exists
st = os.stat(path)
TypeError: stat() argument 1 must be (encoded string without NULL bytes), not str
hmm... yes, I got it, it's the oval validation source in jar files I've downloaded into the modules folder when I was in intellij IDEA. That explains it. Getting rid of that jar file resolves the issue.