我正在使用此示例http://neo4j.com/docs/stable/cypher-cookbook-newsfeed.html來爲我的用戶維護新聞傳送。所以我用下面的發佈狀態更新:Neo4j新聞源調整
MATCH (me)
WHERE me.name='Bob'
OPTIONAL MATCH (me)-[r:STATUS]-(secondlatestupdate)
DELETE r
CREATE (me)-[:STATUS]->(latest_update { text:'Status',date:123 })
WITH latest_update, collect(secondlatestupdate) AS seconds
FOREACH (x IN seconds | CREATE (latest_update)-[:NEXT]->(x))
RETURN latest_update.text AS new_status
而下面來接他們:
MATCH (me { name: 'Joe' })-[rels:FRIEND*0..1]-(myfriend)
WHERE ALL (r IN rels WHERE r.status = 'CONFIRMED')
WITH myfriend
MATCH (myfriend)-[:STATUS|:NEXT*0..2]-(statusupdates)
RETURN myfriend.name AS name, statusupdates.date AS date, statusupdates.text AS text
ORDER BY statusupdates.date DESC LIMIT 3
這看起來簡單。新聞傳送將包含來自我的朋友的最新2個狀態更新。但是,讓我們假設我們想要選擇滿足特定條件的statusupdates。例如:
MATCH (myfriend)-[:STATUS|:NEXT*0..2]-(statusupdates {type: "photo"})
這似乎是工作。但是,如果某個用戶在短時間內發佈了4個狀態更新並且最新的2個不同類型的更新,則這不起作用。
比方說,在4次更新中,最新的2個是「url」類型,而之前的2個是「photo」類型。上述新聞獲取代碼簡單地忽略此用戶,因爲它看到來自該用戶的最新2個狀態更新不是「照片」類型,即使所有4個帖子比來自其他用戶的帖子都新。