Wie kann ich auf alle Benutzer-IDs mit der Farbe Blau und Größe 50 im selben Element der Liste filtern? Nur Benutzer 1347 sollte ausgegeben werden.
{
"userId": "12347",
"settings": [
{ name: "SettingA", color: "blue", size: 10 },
{ name: "SettingB", color: "blue", size: 20 },
{ name: "SettingC", color: "green", size: 50 }
],
}
{
"userId": "1347",
"settings": [
{ name: "SettingA", color: "blue", size: 10 },
{ name: "SettingB", color: "blue", size: 50 },
{ name: "SettingC", color: "green", size: 20 }
]
}
Wenn dies mit $ elemMatch getan werden, wie kann ich schließe sie in der folgenden Abfrage, vorausgesetzt, die folgenden zwei Elemente in der gleichen Liste sein muss: { „rounds.round_values.decision“: „Fold "}, {" rounds.round_values.gameStage ":" PreFlop "}
Ich habe diese Abfrage versucht, aber es liefert keine Ergebnisse. Ich habe gelesen, dass elemMatch in Projektionen arbeitet. Aber wie kann ich $ filter sagen, dass nur Objekte zurückgegeben werden, bei denen die $ elemmMatch-Bedingungen erfüllt sind?
db.games.aggregate([
{ $match: { $and: [
{ Template: "PPStrategy4016" },
{ FinalOutcome: "Lost" }]
}},
{ $elemMatch: {
{ "rounds.round_values.decision" : "Fold"},
{ "rounds.round_values.gameStage" : "PreFlop"}
} },
{
$group: {
_id: null,
total: {
$sum: "$FinalFundsChange"
}
}
} ])
Wie weiß die Übereinstimmung, dass die Farbe Blau und die Größe 50 Teil des gleichen Elements sein müssen? Macht das nicht nur $ elemMatch? – Nickpick
'$ unwind' entfaltet das Array, gefolgt von' $ match', das ist wie und und Abfrage (Farbe und Größe). '$ elemMatch' gilt nicht für die Aggregation –