我正在使用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”和'Train1',则不应该返回:
因此,简而言之,只有当json列表中的值按特定顺序出现时,我才想查询和获取结果。
到目前为止,我有这个
cursor = db.trains.find({"detail.station_name": {"$all": [source, destination]}},
{"train_name": True, "train_no": True, "_id": False})
但它不尊重秩序。它给了我所有列有'源'和'目的地'的火车名称,而不管它们的顺序如何。
我希望我对自己的问题很清楚。我是mongodb的新手。所以任何帮助将不胜感激。
感谢。
答案 0 :(得分:3)
所以数据是'详细'列表已经在正确的oder中排序。
如果details
值已按正确顺序排序,您可以使用以下方式查询:
db.trains.find(
{$and:[
{"details.0.station_name":"station1"},
{"details.station_name":"station2"}
]},
{"train_name":1, train_number:1, _id:0}
);
您正在搜索“查找第一个电台名称为station1
且所有其他电台包含station2
”的所有列车。
如上所述,根据您的用例/应用程序处理数组索引可能并不总是理想的。即除了第一个订单号之外,您并不总是知道订购号。
我不知道如何将文档架构更改为指示的方向。您可以详细说明一下
您可以使用各种data modeling来利用和优化常用查询。作为领域专家,您是做出此决定的最佳人选。 但是,以下是替代示例:
您可以为sourceStation
和destinationStation
添加一个字段,以便轻松查询开始/结束电台:
{
sourceStation: {
id: 001,
name: "station1"
},
destinationStation:{
id: 010,
name: "station3"
},
details: [
{ station_name: "station1",
... },
{ station_name: "station2",
... },
{ station_name: "station3",
...}
],
train_name: "Train1",
train_no: 88,
arrives: <time>,
departs: <time>,
distance_travelled: <distance>
}
或者您可以将旅程中断为单独的文件,以便进行粒度旅行:
{
_id: ObjectId(...),
sourceStation: {
id: 001,
name: "station1"
},
destinationStation:{
id: 009,
name: "station2"
},
train_name: "Train1",
train_no: 88,
arrives: "0900",
departs: "0910",
distance_travelled: "3kms"
},
{
_id: ObjectId(...),
sourceStation: {
id: 009,
name: "station2"
},
destinationStation:{
id: 010,
name: "station3"
},
train_name: "Train1",
train_no: 88,
arrives: "0930",
departs: "0940",
distance_travelled: "4kms"
}
有关更多灵感,另请参阅Data Model Examples and Patterns。
我是mongodb的新手。所以任何帮助都将不胜感激。
我建议您在MongoDB University注册免费在线课程。特别是M101开发人员课程,涵盖架构设计和查询。