首页 > 解决方案 > Mongodb嵌套集合检索

问题描述

我有一个具有以下格式的 MongoDB 集合:

{
        "_id" : ObjectId("5b6b112d1bbd972848b97df4"),
        "team" : "Switzerland",
        "Game" : [
                {
                        "City" : "Nizhny Novgorod",
                        "T2N" : "Costa Rica",
                        "T1N" : "Switzerland",
                        "ST" : "Nizhny Novgorod Stadium",
                        "T1S" : "2",
                        "Date" : "6/27/2018",
                        "T2S" : "2"
                },
                {
                        "City" : "Kaliningrad",
                        "T2N" : "Serbia",
                        "T1N" : "Switzerland",
                        "ST" : "Kaliningrad Stadium",
                        "T1S" : "2",
                        "Date" : "6/22/2018",
                        "T2S" : "1"
                },
                {
                        "City" : "Rostov-on-Don",
                        "T2N" : "Brazil",
                        "T1N" : "Switzerland",
                        "ST" : "Rostov Arena",
                        "T1S" : "1",
                        "Date" : "6/17/2018",
                 }]
}

我正在尝试运行以下查询: db.test.find({"Game.T1S":{$gte:3}}).pretty() 但这会返回以下格式的数据:

{
        "_id" : ObjectId("5b6b112d1bbd972848b97df4"),
        "team" : "Switzerland",
        "Game" : [
                {
                        "City" : "Nizhny Novgorod",
                        "T2N" : "Costa Rica",
                        "T1N" : "Switzerland",
                        "ST" : "Nizhny Novgorod Stadium",
                        "T1S" : "2",
                        "Date" : "6/27/2018",
                        "T2S" : "2"
                },
                {
                        "City" : "Kaliningrad",
                        "T2N" : "Serbia",
                        "T1N" : "Switzerland",
                        "ST" : "Kaliningrad Stadium",
                        "T1S" : "2",
                        "Date" : "6/22/2018",
                        "T2S" : "1"
                },
                {
                        "City" : "Rostov-on-Don",
                        "T2N" : "Brazil",
                        "T1N" : "Switzerland",
                        "ST" : "Rostov Arena",
                        "T1S" : "1",
                        "T2S" : "3"
                        "Date" : "6/17/2018",
                 }]
}

我希望结果是公正的

db.test.find({"Game.T1S":{$gte:3}}).pretty() 但这会返回以下格式的数据:

{
        "_id" : ObjectId("5b6b112d1bbd972848b97df4"),
        "team" : "Switzerland",
        "Game" : [
                {
                        "City" : "Rostov-on-Don",
                        "T2N" : "Brazil",
                        "T1N" : "Switzerland",
                        "ST" : "Rostov Arena",
                        "T1S" : "1",
                        "T2S" : "3"
                        "Date" : "6/17/2018",
                 }]
}

也就是说,游戏的结果应该只包含 T1S >= 3 的记录,而不是第一个输出中的其他记录。有什么办法可以做到这一点?

标签: jsonmongodbspring-data-mongodb

解决方案


尝试这个:

db.collection.find({
  "Game.T1S": {
    $gte: "2"
  }
}, {
  "team": 1,
  "Game.$": 1
})

你可以看到它在这里工作

这个想法是使用 findprojection$ 投影运算符


推荐阅读