rovan-a of Pixel's Programmer
3/14/2017 - 8:21 AM

MongoDB Query

MongoDB Query

#INTRODUCTION
Secara garis besar find lebih diutamakan untuk proses pencarian database dengan proses sederhana(matching, sorting).
Aggregate digunakan untuk meringankan proses query dengan inputan yang banyak dan menghasilakn result yang sedikit yang nilainya diberikan.

# Find
db.collection.find(query, projection)

example:
db.managix.find({"ad_account_id": 6, "campaign_id":40214}, {"ad_account_id":1, "campaign_name":1,"ad_account_name":1})


# aggregate query

db.collection.aggregate(pipeline, options)

example:
db.campaign.aggregate(
  [
			{"$match": { //match data
				"ad_account_id": 6,
				"campaign_id": {"$in": [404214, 404224]},
				"effective_status": {"$in": ['ACTIVE']},
				"objective": {"$in": ['APP_INSTALLS']},
			}},
			{'$lookup': {
				'localField': 'campaign_id', //lookup adset data
				'from': 'adset',
				'foreignField': 'campaign_id',
				'as': 'adset'}},
			{"$group": {
				"_id" : {"adset_id":"$adset_id"}, // group berdasarkan adset_id
			},
			{"$project": { //sort or filtering
				"adset": {
					"$filter": {
						"input": "$adset",
						"as": "a",
						"cond": {"if": {"$$a.targeting.device_platforms": {"$in": ['mobile', 'desktop']}}, 'then': 30,
						         'else': 20}
					}
				}}
			}
		]))
	
	$match -> aggregate pipeline untuk match data yang akan diambil
	$lookup -> seperti relation di SQL, dimana kita bisa mendapatkan data dari collection lain di database yang sama
	$project -> untuk sort di aggregation/ filtering
	$group -> mengabungkan data
	$in ->  match data dimana data yang diberikan berupa list data set of value