【发布时间】:2017-01-11 21:15:37
【问题描述】:
如何过滤列表中同一元素中所有颜色为蓝色且大小为 50 的用户 ID?应该只输出用户 1347。
{
"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 }
]
}
如果这可以用 $elemMatch 完成,我如何将它包含在以下查询中,假设以下两个元素需要在同一个列表中:{“rounds.round_values.decision”:“Fold”}, { "rounds.round_values.gameStage" : "翻牌前"}
我尝试了这个查询,但没有产生任何结果。我读过那是因为 elemMatch deosnt' 在预测中起作用。但是如何告诉 $filter 只返回满足 $elemmMatch 条件的对象呢?
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"
}
}
} ] )
【问题讨论】: