Mongodb 嵌套集合检索
Mongodb nested collection retrieval
我有一个 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}}).漂亮()
但是这个 returns 数据格式如下:
{
"_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}}).漂亮()
但是这个 returns 数据格式如下:
{
"_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 的记录,而不是第一个输出中的其他记录。有什么办法可以做到这一点?
试试这个:
db.collection.find({
"Game.T1S": {
$gte: "2"
}
}, {
"team": 1,
"Game.$": 1
})
想法是使用查找 projection
和 $ projection operator
我有一个 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}}).漂亮() 但是这个 returns 数据格式如下:
{
"_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}}).漂亮() 但是这个 returns 数据格式如下:
{
"_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 的记录,而不是第一个输出中的其他记录。有什么办法可以做到这一点?
试试这个:
db.collection.find({
"Game.T1S": {
$gte: "2"
}
}, {
"team": 1,
"Game.$": 1
})
想法是使用查找 projection
和 $ projection operator