2016-11-02 6 views
2

私はpostgresqlとリレーショナルデータベースのバックグラウンドを持っていますし、mongoにいくつかの用途には良いと思われるので、再びチャンスを与えようとしています。あなたは緯度と経度のための条件を定義する「COORD」配列、で動作演習の二つにMongoDB:mongodbの2要素のNumber配列の2番目の要素に条件を付ける方法は?

{ 
    "address": { 
    "building": "1007", 
    "coord": [ -73.856077, 40.848447 ], 
    "street": "Morris Park Ave", 
    "zipcode": "10462" 
    }, 
    "borough": "Bronx", 
    "cuisine": "Bakery", 
    "grades": [ 
    { "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 }, 
    { "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 }, 
    { "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 }, 
    { "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 }, 
    { "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 } 
    ], 
    "name": "Morris Park Bake Shop", 
    "restaurant_id": "30075445" 
} 

: 私は、次のような構造を持つ文書で動作し、このウェブサイトhttp://www.w3resource.com/mongodb-exercises/に練習をしていました。つまり、配列の最初のコンポーネントまたは2番目のコンポーネントをどこで制限しているのかわかりません。具体的に言っているわけではありません...次の演習では、緯度を制限し、もう一方は経度を制限するように求めることができますか?どのように具体的に言うと "coords配列の最初の構成要素は...以下でなければならない" ... "または" coords配列の2番目の構成要素は.... "ありがとう。

  1. MongoDBのクエリを書いて、「アメリカ人」の料理を準備しておらず、成績スコアが70以上、緯度が-65.754168未満のレストランを探してください。 [ { "料理":{$ NE: "アメリカン "}}、{ " grades.score":{$ GT:70

    db.restaurants.find( {$、エディタに移動します}}、 {"address.coord":{$ lt:-65.754168}} ] } );

  2. 「アメリカン」の料理を準備しておらず、70以上のスコアを達成し、-65.754168未満の経度にはないレストランを見つけるためにMongoDBのクエリを書く。 注:$と演算子を使用せずにこのクエリを実行してください。 { "料理"::{$ NE: "アメリカ"}、 "grades.score":{$のGT:70}、

    db.restaurants.find( {$クエリエディタに移動します"address.coord":{$ lt:-65.754168} } });

答えて

2

このコマンド

を変換するクエリを生成するために、あなたの質問に答える

または

"COORDS配列の最初の要素は、より...小さくなければなりません"

"coords配列の2番目の要素は...."でなければなりません。

あなたは、ゼロベースのインデックス位置によって配列の要素にアクセスし、ドットで配列名を連結するためにdot notationを使用する必要がありますし、ゼロベースのインデックス位置、および引用符で囲みます(。):

"<array>.<index>" 

は、上記の例では、配列の最初の要素は経度値を保持すべきであり、第二は、緯度値を含むべきです。したがって、あなたは

"address.coord.0"

と緯度の両方のエキソサイズのためにそう

"address.coord.1"


、正しいのために必要な 経度にアクセスするにはクエリは、次のとおりです。

db.restaurants.find({ 
    "cuisine": { "$ne": "American "}, 
    "grades.score": { "$gt": 70 }, 
    "address.coord.1": { "$lt": -65.754168 } 
}); 

検索:

は 「アメリカ人とそのグレードのいずれかの料理が70以上のスコアと-65.754168未満緯度準備していないレストランを検索しますレストラン「アメリカ」 の料理を準備しておらず、70点以上のスコアを達成し、経度に位置していないレストラン -65.754168未満のレストラン。式のコンマ区切りリストを指定する場合

両方の上記の例で
db.restaurants.find({ 
    "cuisine": { "$ne": "American "}, 
    "grades.score": { "$gt": 70 }, 
    "address.coord.0": { "$gte": -65.754168 } 
}); 

に、$andが暗黙的に使用されます。 $and演算子を使用した明示的ANDの使用は、複数の式で同じフィールドまたは演算子を指定する必要がある場合に必要です。

+1

ありがとうございます!私はその例が間違っていることを知っていました....そのウェブサイトには間違った例がたくさんあります...... – Juan

関連する問題