Ich habe eine Sammlung, die Dokumente mit dem folgenden Schema enthält. Ich möchte alle Dokumente filtern / finden, die das weibliche Geschlecht enthalten, und die Summe der Gehirnwerte zusammenfassen. Ich habe die folgende Anweisung ausprobiert und sie zeigt einen ungültigen Pipelinefehler.
db['!all'].aggregate({ $and: [ {'GENDER' : 'F'} , {'DOB' : { $gte : 19400801, $lte : 20131231 }} ] }, { $group : { _id : "$GENDER", totalscore : { $sum : "$BRAINSCORE" } } } )
Schema:
{
"_id" : ObjectId("53f63fc8f2b643f6ebb8a1a9"),
"DOB" : 19690112,
"GENDER" : "F",
"BRAINSCORE" : 65
},
{
"_id" : ObjectId("53f63fc8f2b643f6ebb8a1a2"),
"DOB" : 19950116,
"GENDER" : "F",
"BRAINSCORE" : 44
},
{
"_id" : ObjectId("53f63fc8f2b643f6ebb8a902"),
"DOB" : 19430216,
"GENDER" : "M",
"BRAINSCORE" : 71
}
Bitte helfen Sie ...
Beispiel für eine Arbeitsabfrage:
db.getCollection('NOTIF_EVENT_RESULT').aggregate([ {$match: {'userId': {'$in' : ['user-900', 'user-1546']}, 'criteria.operator': 'greater than', 'criteria.thresold' : '90', 'category' : 'capacity'} }, {"$group" : {_id : {userId:"$userId"}, "count" : { "$sum" : 1} } } ])
quelle
Hier ist eine Antwort, wenn die DOB-Nummern in Datum konvertiert und dann verglichen werden müssen. Wenn nicht, wird eine Zahl oder ein Datum wie 1970 fälschlicherweise $ gte bis 19400801 sein (Sie können es versuchen):
db['!all'].aggregate([ { $addFields: { "_temp_DOB": { $dateFromString: { dateString: {$toString: {$toLong: "$DOB"}}, format: "%Y%m%d" } } } }, { $match: { 'GENDER': 'F', '_temp_DOB': { $gte: new Date("1940-08-01"), $lte: new Date("2013-12-31") } } }, { $group: { _id: "$GENDER", totalscore: { $sum: "$BRAINSCORE" } } } ])
Ausgänge:
{ "_id" : "F", "totalscore" : 109 }
quelle