【发布时间】:2016-10-26 03:29:09
【问题描述】:
我正在使用 pymongo。我的收藏中的文档如下所示。
{
train_name: <Train1>
train_number: <#>
details: [
{
station_name: <station1>
arrives: <time>
departs: <time>
distance_travelled: <distance>
halt: <>
}
{
station_name: <station2>
arrives: <time>
departs: <time>
distance_travelled: <distance>
halt: <>
}
{
station_name: <station3>
arrives: <time>
departs: <time>
distance_travelled: <distance>
halt: <>
}
]
我想查询此数据库以查找两个车站之间的可用列车。也就是说,用户将提供一个“源”站和一个“目的地”,我需要一个查询来返回“源”和“目的地”之间的所有可用列车
从这个示例文档中,如果用户提供,我应该得到“Train1”的结果:
- 来源 - “station1”
目的地 - “station2” - 来源 - “station1”
目的地 - “station3”
如果用户提供了'Train1',则不应返回:
- 来源 - “station2”
目的地 - “station1” - 来源 - “station3”
目的地 - “station1”
简而言之,我只想在值以特定顺序出现在 json 列表中时查询和获取结果。
到目前为止,我有这个
cursor = db.trains.find({"detail.station_name": {"$all": [source, destination]}},
{"train_name": True, "train_no": True, "_id": False})
但它不尊重顺序。它给了我所有同时具有“来源”和“目的地”的火车名称,而不管它们的顺序如何。
我希望我的问题很清楚。我是 mongodb 的新手。因此,我们将不胜感激任何帮助。
谢谢。
【问题讨论】:
-
嗨,您的数据中缺少火车方向。即您的第一个示例 (source:station1) 和第二个示例 (destination: station1) 之间有什么区别?您可以在文档中添加一些信息或更改schema 以指示方向。此外,您的查询本质上是在询问“查找与
station1ANDstation2匹配的所有电台名称,仅返回字段train_name和train_no。” -
对不起,如果我的问题有任何混淆。在上面的示例文档中,“station1”是旅程“开始”的地方,“station3”是“Train1”旅程“结束”的地方。所以数据是“详细”列表已经按正确的顺序排序。如果它在“station1”(可以是任何源站)和“station3”(可以是任何目标站)之间运行,我只需要获取这个火车名称。我不确定如何将文档架构更改为指示的方向。你能详细说明一下吗?谢谢。