私はpymongoを使用しています。私のコレクションの文書は次のようになります。MongoDB:値が特定の順序で存在する場合、json配列からデータを取得する
{
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: <>
}
]
このデータベースにクエリを送信して、2つのステーション間で利用可能な電車を検索します。つまり、ユーザーは 'ソース'ステーションと 'デスティネーションステーション'を提供し、 'ソース'と 'デスティネーション'の間で利用可能なすべての列車を返すクエリが必要です
このサンプルドキュメントから、 'Train1' その結果、ユーザが提供する場合:
- ソース - "STATION1"
先 - "station2" - ソース - "STATION1"
先 - "station3"
先 - "STATION1"
先 - "STATION1"
- ソースを:ユーザが提供している場合は
と'Train1は' 復帰すべきではありません
要するに、値が特定の順序でjsonリストに存在する場合のみ、結果を照会して取得したいと考えています。
はこれまでのところ、私はこの
cursor = db.trains.find({"detail.station_name": {"$all": [source, destination]}},
{"train_name": True, "train_no": True, "_id": False})
を持っている。しかしその注文を尊重していません。それは、その順序に関係なく、「ソース」と「デスティネーション」の両方を持つすべての電車名を私に与えます。
私は私の質問ではっきりと願っています。私はmongodbに新しいです。だから、どんな助けにも感謝します。
ありがとうございました。
こんにちは、あなたのデータに列車の方向がありません。つまり、最初の例(source:station1)と2番目の例(destination:station1)の違いは何ですか?いくつかの情報を追加するか、ドキュメントに[schema](https://docs.mongodb.com/manual/data-modeling/)を変更して方向を示すことができます。また、あなたの質問は本質的に "私に駅名が' station1'と 'station2'と一致するすべての駅名を見つけて、' train_name'と 'train_no'フィールドだけを返すように求めています。 –
私の質問に混乱があったら申し訳ありません。上記の例の文書では、 'station1'は旅の開始地点、 'station3'は 'Train1'の旅路 'ends'です。したがって、データは「詳細」リストが既に正しいoderでソートされています。私が必要とするのは、 'station1'(任意の発信元とすることができる)と 'station3'(任意の送信先の駅)の間を走るならば、この列車名を得ることだけです。私は指示された方向に文書のスキーマをどのように変更できるかわかりません。あなたはちょっとそれを詳しく教えてもらえますか?ありがとう。 –