Date Grouping Db.msds_accessrecord.group ({keyf:function (doc) {var date = new Date (doc.addtime); var DateKey = "" +date.getfullyear () + "-" + (Date.getmonth () +1) + "-" +date.getdate (); return {' Day ':d Atekey}; Initial: {"Count": 0}, Reduce:function reduce (doc, out) {if (Doc.url) {Out.count +=1; }}});
Insert test Data First:
for (var i=1; i<20; i++) {
var num=i%6;
Db.test.insert ({_id:i,name: "User_" +i,age:num});
}
1. General Group Query
Db.test.group ({key:{age:true},initial:{num:0}, $reduce: function (Doc,prev) {
prev.num++
}});
Db.runcommand ({group:
{
NS: "Test",
Key:{age:true},
initial:{num:0},
$reduce: Function (Doc,prev) {
prev.num++}
}
});
2. Filter and then group
Db.test.group ({key:{age:true},initial:{num:0}, $reduce: function (Doc,prev) {
prev.num++
},
condition:{age:{$GT: 2}}
});
Db.runcommand ({group:
{
NS: "Test",
Key:{age:true},
initial:{num:0},
$reduce: Function (Doc,prev) {
prev.num++},
condition:{age:{$GT: 2}}
}
});
Common $where Query:
Db.test.find ({$where: function () {
Return this.age>2;
}
});
Group Federated $where Query
Db.test.group ({key:{age:true},initial:{num:0}, $reduce: function (Doc,prev) {
prev.num++
},
condition:{$where: function () {
Return this.age>2;
}
}
});
3. Grouping using function return values
Note that the function $keyf specified must return an object
Db.test.group ({$keyf: function (DOC) {return {age:doc.age};},initial:{num:0}, $reduce: function (Doc,prev) {
prev.num++
}
});
Db.runcommand ({group:
{
NS: "Test",
$KEYF: Function (DOC) {return {age:doc.age};},
initial:{num:0},
$reduce: Function (Doc,prev) {
prev.num++}
}
});
4. Using finalizers
Db.test.group ({$keyf: function (DOC) {return {age:doc.age};},initial:{num:0}, $reduce: function (Doc,prev) {
prev.num++
},
Finalize:function (DOC) {Doc.count=doc.num;delete doc.num;}
});
Db.runcommand ({group:
{
NS: "Test",
$KEYF: Function (DOC) {return {age:doc.age};},
initial:{num:0},
$reduce: Function (Doc,prev) {
prev.num++},
Finalize:function (DOC) {Doc.count=doc.num;delete doc.num;}
}
});
About MapReduce
Insert test Data First
for (Var i=1;i<21;i++)
{
Db.test.insert ({_id:i,name: ' mm ' +i});
}
For MapReduce
Db.runcommand (
{
MapReduce: ' Test ',
Map:function () {Emit (This.name.substr (0,3), this);},
Reduce:function (key,vals) {return vals[0];},//Note: Vals is an object instead of an array
Out: ' Wq '
});
Attention:
1.mapreduce is grouped according to the first parameter of the emit function called in the map function.
2. Key and document collections are processed by the reduce function only if a key matches multiple documents based on the grouping key. For example:
Db.runcommand (
{
MapReduce: ' Test ',
Map:function () {Emit (This.name.substr (0,3), this);},
Reduce:function (key,vals) {return ' Wq ';},
Out: ' Wq '
});
After executing the MapReduce command, review the WQ table data:
Db.wq.find ()
{"_id": "MM1", "Value": "Wq"}
{"_id": "mm2", "Value": "Wq"}
{"_id": "Mm3", "value": {"_id": 3, "name": "Mm3"}}
{"_id": "MM4", "value": {"_id": 4, "name": "Mm4"}}
{"_id": "MM5", "value": {"_id": 5, "name": "MM5"}}
{"_id": "MM6", "value": {"_id": 6, "name": "Mm6"}}
{"_id": "MM7", "value": {"_id": 7, "name": "Mm7"}}
{"_id": "MM8", "value": {"_id": 8, "name": "MM8"}}
{"_id": "Mm9", "value": {"_id": 9, "name": "Mm9"}}
MongoDB Common command date, grouping