2016-09-15 3 views
1

私はMEANスタックと各オブジェクトがローカルビジネスであるオブジェクトの配列を返すYelp APIを使ってWebアプリケーションを構築しています。このデータはフロントエンドで処理しますが、応答を送信する前に、特定のオブジェクトがMongoDBデータベースに存在するかどうかを確認したいと思います。その処理方法は苦労しています。私が使用して私の配列をループへのノードでクエリを書くことができますどのようにNode/Expressでオブジェクトの配列をループしてMongoDBデータベースに一致するものがあるかどうかをチェックする方法は?

{ 
    "_id": { 
     "$oid": "57da26d8dcba0f51172f47b1" 
    }, 
    "name": "Arendsnest", 
    "url": "https://www.yelp.com/biz/arendsnest-amsterdam-2?adjust_creative=ycRBsh7KEkNFq3wJvKoL6Q&utm_campaign=yelp_api&utm_medium=api_v2_search&utm_source=ycRBsh7KEkNFq3wJvKoL6Q", 
    "snippet_text": "The reigning Lord of Amsterdam beer bars. Popular and seats go fast...come early. Ask for the massive all-Dutch beer list and prepare to have your...", 
    "image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/FurcfTuqaYBv_q34bGTK5g/ms.jpg" 
} 

[ 
    { 
     "name": "Arendsnest", 
     "url": "https://www.yelp.com/biz/arendsnest-amsterdam-2?adjust_creative=ycRBsh7KEkNFq3wJvKoL6Q&utm_campaign=yelp_api&utm_medium=api_v2_search&utm_source=ycRBsh7KEkNFq3wJvKoL6Q", 
     "snippet_text": "The reigning Lord of Amsterdam beer bars. Popular and seats go fast...come early. Ask for the massive all-Dutch beer list and prepare to have your...", 
     "image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/FurcfTuqaYBv_q34bGTK5g/ms.jpg" 
    }, 
    { 
     "name": "Bar Oldenhof", 
     "url": "https://www.yelp.com/biz/bar-oldenhof-amsterdam?adjust_creative=ycRBsh7KEkNFq3wJvKoL6Q&utm_campaign=yelp_api&utm_medium=api_v2_search&utm_source=ycRBsh7KEkNFq3wJvKoL6Q", 
     "snippet_text": "So I'm not much of a drinker. My taste is highly selective and I usually prefer not to drink alcohol altogether. But my husband is the opposite so on a...", 
     "image_url": "https://s3-media4.fl.yelpcdn.com/bphoto/1k57z7ziIW8MyAWHlXWGdg/ms.jpg" 
    }, 
    { 
     "name": "Beer Temple", 
     "url": "https://www.yelp.com/biz/beer-temple-amsterdam?adjust_creative=ycRBsh7KEkNFq3wJvKoL6Q&utm_campaign=yelp_api&utm_medium=api_v2_search&utm_source=ycRBsh7KEkNFq3wJvKoL6Q", 
     "snippet_text": "This is a great place to stop in and have some American craft beer. With 30+ taps and a seemingly never ending list of bottle selections, you have many...", 
     "image_url": "https://s3-media1.fl.yelpcdn.com/bphoto/yxUiYre1Y6ULqMhQ30NPOA/ms.jpg" 
    }, 
    { 
     "name": "Tales & Spirits", 
     "url": "https://www.yelp.com/biz/tales-en-spirits-amsterdam?adjust_creative=ycRBsh7KEkNFq3wJvKoL6Q&utm_campaign=yelp_api&utm_medium=api_v2_search&utm_source=ycRBsh7KEkNFq3wJvKoL6Q", 
     "snippet_text": "This is exactly what every high-end cocktail bar should strive to have and be.\n\nFriendly staff: From the bartenders to the manager to the waitress. Everyone...", 
     "image_url": "https://s3-media4.fl.yelpcdn.com/bphoto/IElXytpbY0bpp7ZdjFdGvA/ms.jpg" 
    } 
] 

これは、MongoDBのデータベースに存在する:ここで

がAPIから返されたオブジェクトでありますnameプロパティが存在し、それがデータベースに存在し、データを返す場合、すべてのオブジェクトのチェックを行いますか?

+0

クエリ 'db.collection.find( 'name':{$ in:namesArray});' – Molda

+0

これは動作するはずです! 2つのプロパティの一致を検索する場合はどうなりますか?例えば名前とURL? – chemook78

+0

$やorや$やその他の演算子があります。 'dbcollection.find( '$ and':{{name: '....'}、{url: '....'}]);' mongodbドキュメントをチェックすることをお勧めします:) – Molda

答えて

1

$or演算子は、照会するフィールドを持つマップされた配列で配列を反復処理する必要はありません。これは、同等の、あなたのfind()方法で$or表現として使用することができる配列、に作成されます

var yelp = [ 
    { 
     "name": "Arendsnest", 
     "url": "url1", 
     "snippet_text": "foo", 
     "image_url": "bar.jpg" 
    }, 
    { 
     "name": "Bar Oldenhof", 
     "url": "abc", 
     "snippet_text": "efg", 
     "image_url": "ms.jpg" 
    }, 
    { 
     "name": "Beer Temple", 
     "url": "https://www.yelp.com/", 
     "snippet_text": "test", 
     "image_url": "ms.jpg" 
    }, 
    { 
     "name": "Tales & Spirits", 
     "url": "https://www.yelp.com/", 
     "snippet_text": "This is exactly...", 
     "image_url": "ms.jpg" 
    } 
], 
query = yelp.map(function(item){ return { name: item.name, url: item.url }; }); 

db.collection.find({ "$or": query }); 

:あなたは二つの特性の一致を検索したい場所

は、次の例を見てみましょう:

db.collection.find({ 
    "$or": [ 
     { 
      "name": "Arendsnest", 
      "url": "url1" 
     }, 
     { 
      "name": "Bar Oldenhof", 
      "url": "abc" 
     }, 
     { 
      "name": "Beer Temple", 
      "url": "https://www.yelp.com/" 
     }, 
     { 
      "name": "Tales & Spirits", 
      "url": "https://www.yelp.com/" 
     } 
    ] 
}) 

単一のプロパティを照会するために、あなたがQUERするインスタンスのために言います名前だけフィールド上のyは、より良い、より良いようにするために最適化され$in演算子を使用します。

query = yelp.map(function(item){ return item.name; }); 
db.collection.find({ "name": { "$in": query } }); 
あなたはすべての名前を取得し、配列にそれらをプッシュし、その後にオペレータに$を使用するように各ループのために使用することができ
関連する問題