گراف دیتابیس Neo4j (نگاه کلی قسمت دوم)

قسمت های قبل:مقدمهنگاه کلی (قسمت اول)ما تا اینجا با دو عبارت CREATE و RETURN از عبارت های cypher یه آشنایی اولیه پیدا کردیم و یک ‌node برای فیلم ماتریکس ایجاد کردیم حالا می‌خوایم node ساخته شده را پیداش کنیم و بازیگرهای فیلم را ایجاد کنیم و فیلم وصلشون کنیم.جا داره اینجا با یه همراه خوبه دیگه آشناتون کنم:Neo4j Cypher Reference Cardمرجع جمع و جور cypher که بیشتر قابلیت های cypher رو دمه دستتون گذاشته. من خودم به شخصه وقتی با neo4j کار دارم این همیشه تو یکی از تب هام بازه.من مدلمون رو یکباره دیگه اینجا میزارم و بعد میریم سراغ ادامه داستان.Graph Domain Modelعبارتی که برای پیدا کردن node ها و relation ها در cypher استفاده خواهیم کرد: MATCH (variable :LABEL :ANOTHER_LABEL [{key: expected_value}]) [WHERE exp]برای نمونه:MATCH (m :Movie {title:'The Matrix'}) RETURN mعبارت MATCH کارش پیدا کردن الگوی گراف بعد از خودشه. در cypher بالا ما از neo4j میخوایم که یک الگوی گراف درای یک node منتصب به متغیر m که لیبل :Movie دارد و key: value دارد به صورد title: 'The Matrix' را پیدا کند. و متغیر m را برگردان.MATCH (m :Movie) WHERE m.title='The Matrix' RETURN m الگوی گراف درای یک node که منتصب به متغیر m است و لیبل :Movie دارد در صورتی که (WHERE)m.title و 'The Matrix' مساوی باشند را برگردان. نکته: در صورتی که متغیر node یا relation باشد می‌توان با . به property های آن دسترسی پیدا کرد (m.release)خوب اگه دستورات بالا رو مثل من اجرا کرده باشید احتمالا یه جوابی به صورت بالا گرفتین که تعداد نود هایی که برگردونده شدن با تعداد باری که دستور ساخت را در قسمت قبل اجرا کردین برابر هستش.حالا که یه مقداری با دستور MATCH آشنا شدیم میریم که بازیگرهای فیلم ماتریکس رو بسازیم و به فیلم وصل کنیم.// This is Comment // First Part MATCH (TheMatrix :Movie {title:'The Matrix'}) //Second Part CREATE (Keanu:Person {name:'Keanu Reeves', born:1964}) CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967}) CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961}) CREATE (Hugo:Person {name:'Hugo Weaving', born:1960}) CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967}) CREATE (LanaW:Person {name:'Lana Wachowski', born:1965}) CREATE (JoelS:Person {name:'Joel Silver', born:1952}) // 3th Part CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix), (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix), (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix), (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix) // back to back CREATE (Emil:Person {name:&quotEmil Eifrem&quot, born:1978}) CREATE (Emil)-[:ACTED_IN {roles:[&quotEmil&quot]}]->(TheMatrix) RETURN TheMatrix, Keanu, Carrie, Laurence, Hugo اول node فیلم که label اش :Movie و title اش 'The Matrix' بود رو پیدا کنیمدوم برای بازیگرهامون node بسازیمسوم relation های بین فیلم و بازیگرها رو بسازیم و وصل کنیم.در مورد قسمت اول و دوم صحبت کردیم. در قسمت سوم برای اولین بار با عبارت -[ :ACTED_IN]- آشنا میشیم. در CYPHER (رابطه) relation به صورت -[]- نمایش داده میشه و جهت گراف هم با > یا < یا در صورت عدم وجود relation دو طرفه مشخص میشه. :label و {key: value, ... } هم مثل node هستند. که در موردشون صحبت کردیم.نکته: property ها میتوانند از جنس list که به صورت ([1,2,3]) باشند. roles در cypher بالا ار جنس list است.خوب تو این قسمت روش ساخت رابطه رو با cypher به شما نشون دادم و موفق شدیم فیلم The Matrix رو فعلا در دیتابیسمون ذخیره کنیم.همونطور که می‌بینید اگه بیشتر از یه بار دستورات قسمت قبل رو اجرا کرده باشید کلی node و رابطه تکراری ایجاد کردید. ولی نگرانش نباشید من تو قسمت بعدی جریان اجرای cypher رو بیشتر توضیح میدم و trace میکنم. تا متوجه دلیل node و relation ها بشید.کنجکاویی: با استفاده از عبارت Match بازیگرهایی رو پیدا کنید که در فیلم ماتریکس بیشتر از 25 سال داشتند. Neo4j Cypher Reference Cardاگه سوال یا مشکلی داشتین حتما داخل کامنت ها بپرسید.