Mongodb嵌套集合检索

时间:2018-08-09 20:40:56

标签: json mongodb spring-data-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的记录,而不包含第一条输出中的其他记录。有什么办法可以实现?

1 个答案:

答案 0 :(得分:0)

尝试一下:

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

您可以see it working here

想法是使用查找projection$ projection operator