MongoDB查询 - 查询子对象中任何键的值:$ match与$ elemMatch组合

时间:2016-09-04 07:47:36

标签: mongodb list filtering

如何在列表的同一元素中过滤所有颜色为蓝色且尺寸为50的userID?只应输出用户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" :" PreFlop"}

我尝试了这个查询,但它没有产生任何结果。我读过因为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" 
        } 
    } 
} ] )

1 个答案:

答案 0 :(得分:0)

根据给定的文档,查询如下:

db.games.aggregate( 
   {$unwind : "$settings"}, 
   {$match: {"settings.color" : "blue", "settings.size" : 50}} , 
   {$group: {_id: null, total: {$sum: "$settings.size"}}} )

如果您难以将其转换为自己的域名,请提供您域中的一些示例文档。