I'm trying to get attendants of only one recording of a meeting
I'm able to get records with sco-contents and get attendants of a meeting by report-meeting-attendance
but report-meeting-attendance returns all of attendants in all recordings of a meeting and I cant filter it by recording scoid(it returns empty)
how can I get attendants of single recording of a meeting?
You should use report-event-participants-complete-information with your meeting sco-id as parameter.
Find more information about It here.
Related
I'm new to Neo4j, and playing around by trying to set up a music database. To start simple, I'm just playing with two labels:
Artist
Song
Obviously this is a parent-child relationship, where a Song is a child of an Artist (or possibly multiple Artists), and might look something like:
(:Artist {name:'name'})-[:RECORDED]->(:Song {title:'title'})
I am making the following assumptions:
Artist names are unique
Song titles are not unique
Duplicate ingest data is unavoidable
To give an example of what I'd like to do:
I ingest "Hallelujah" by Leonard Cohen. A new Artist node and Song node are created, with a RECORDED relationship
I ingest "Hallelujah" by Jeff Buckley. Again, new Artist and Song node are created, with a RECORDED relationship. The first "Hallelujah" Song is not associated with this new graph at all.
I ingest "Hallelujah" by Jeff Buckley again. Nothing happens.
I ingest "Lilac Wine" by Jeff Buckley. We reuse our old Artist node, but I have a new Song node with a RECORDED relationship
From what I can tell, using MERGE gets me close, but not quite there (it stops duplication of the ARTIST, but not of the SONG). If I use CREATE, then point number 3. doesn't work properly.
I guess I could add another property to the SONG label which tracks its ARTIST (and I can therefore make unique), but that seems a little redundant and unidiomatic of a graph database, no?
Does anyone have any bright ideas on the most succinct way of enforcing these relationships and requirements?
Merge Artist first, and after Song:
WITH 'Leonard Cohen' AS ArtistName,
'Hallelujah' AS SongTitle
MERGE (A:Artist {name:ArtistName})
WITH A,
SongTitle
OPTIONAL MATCH p=(A)-[:RECORDED]->(:Song {title:SongTitle})
FOREACH (x in CASE WHEN p IS NULL THEN [1] ELSE [] END |
CREATE (S:Song {title:SongTitle})
MERGE (A)-[:RECORDED]->(S)
)
WITH A,
SongTitle
MATCH p = (A)-[:RECORDED]->(:Song {title:SongTitle})
RETURN p
I don't think song title is something you can rely on for uniqueness, especially if this graph includes covers of existing songs.
Determining some additional means to imply uniqueness is the way to go.
Artist is one way. Recorded date might be another piece of data to consider. If you're reading this from some other kind of database, there may be some other unique ID they use for uniqueness.
Whatever the case, once you have the fields that you want to use to determine uniqueness, MERGE your song node with all those fields present.
I work in a company that makes a social game where our users can have friends and can make content that based on popularity shows up on highscores.
I am trying to find out whether we can move some of our data to a graph database like neo4j and one of the things I can't figure out is how to implement a highscore system in a graph database. I basically want to make queries like this:
Get list of movies/artbooks/photos content created by friends ordered by content with most likes.
Get list of movies/artbooks/photos content created by ALL USERS in the last 7 days ordered by content with most likes.
What kind of data modeling and queries should we do to implement this?
The datamodel I was planning to do was to have users as nodes and the content made by a user linked to the user as a list of connected content nodes with the latest one linked to the user, but how do I get highscores into such a model.
Thanks.
Here is one possible model:
(f:User {name: "Fred"})-[:CREATED]->(c:Content {created: 2345, type: "Music"})
(m:User {name: "Mary"})-[:LIKES {score:5}]->(c:Content)
(f)-[:KNOWS]->(m);
To get the content created by all Users since a specific timestamp, in descending order by the number of likes, you can use the following query. The OPTIONAL MATCH is used to avoid filtering out Content with no likes.
MATCH (c:Content)
WHERE c.created > 1234
OPTIONAL MATCH ()-[l:LIKES]->(c)
RETURN c, COUNT(l) AS num_likes
ORDER BY num_likes DESC;
Here is a console that illustrates this.
I have been reading about Graph databases and want to know if this type of structure is applicable to it:
Company > Has user Accounts > Accounts send out facebook posts (which are available to all users)
Up to here - I think this makes sense - yes it would be a good use of Graph. A post has a relationship to any accounts and you can find out the direction both ways - posts for a company and which posts were sent by which users or companies.
However
Users get added and deleted on a daily basis and I need a record store of how many there were at a given time
Accounts are getting results for each post (likes/friends) which I need to store on a daily basis
I need to find out how many likes a company received (on any given day)
I also need to find out how many likes a user received
I need to find out how many likes a user received per post
You would need to store Likes as a group and then date-value - can you even have "sub" properties?
I struggle at this point unless you are storing lots of date-value property lists per node. Is that the way you would do it? If I wanted to find out the later 2 points for example would it be as efficient as a RDBMS?
Here is a very simple example of a Graph data model that seems to cover your stated use cases. (Since nodes can have multiple labels, all Company and User nodes are also Entity nodes -- to simplify the model.)
(:Company:Entity {id:100})-[:HAS_USER]->(:User:Entity {id: 200})
(:Entity)-[:SENT]->(:Post {date: 123, msg: "I like cats!"})
(:Entity)-[:LIKES {date: 234}]->(:Post)
Your use cases:
Users get added and deleted on a daily basis and I need a record store of how many there were at a given time.
How to count all users:
MATCH (u:User)
RETURN COUNT(*);
How to count a company's users:
MATCH (c:Company {id:100})-[:HAS_USER]->(u:User)
RETURN COUNT(*);
I need to find out how many likes a company received (on any given day)
MATCH (c:Company {id: 100})-[:SENT]->(p:Post)<-[:LIKES {date:234}]-()
RETURN COUNT(*)
I also need to find out how many likes a user received
MATCH (u:User {id:200})-[:SENT]->(p:Post)<-[:LIKES]-()
RETURN COUNT(*);
I need to find out how many likes a user received per post
MATCH (u:User {id:200})-[:SENT]->(p:Post)<-[:LIKES]-()
RETURN p, COUNT(*)
You would need to store Likes as a group and then date-value - can you even have "sub" properties?
You do not need to explicitly group likes by date (if that is what you mean). Such "groupings" can be easily obtained by the appropriate query (e.g., in #2 above).
I've just recently started using neo4j and I've run into an issue. There doesn't seem to be an answer to this on here but I might also be wording it incorrectly. I'm building a small site that categorizes music. There are multiple song nodes with BELONGS_TO relationships to genre nodes. How can I get every song that belongs to a set of user specified genres.
For example. Song1, Song2, Song3 all belong to both Pop and Electronic. Song4 just belongs to Pop. How can I query to get every song belonging to both Pop and Electronic? In this case Song1, Song2, an Song3.
I've been struggling with this for a while. This is what I have so far but it doesn't return anything. If I replace AND with OR I get all the songs that belong to one of those genres.
MATCH (n:Song)-[r:BELONGS_TO]->(Genre)
WHERE (n)-[r]->(Genre{name:"Pop"}) AND (n)-[r]->(Genre{name:"Electronic"})
RETURN n
Thank you.
What you're trying to do in the WHERE clause you should actually do in the MATCH clause. Here you go:
MATCH (g1:Genre {name: "Pop"})<-[:BELONGS_TO]-(popElectronicSongs:Song)-[:BELONGS_TO]->(g2:Genre {name: "Electronic"});
RETURN popElectronicSongs;
You can actually do quite a lot with just the MATCH clause as you can see here. The WHERE bit usually gets used for filtering based on various predicates. For example you might say WHERE popElectronicSongs.title =~ /S.*/ to filter for only songs whose name starts with S.
I am working on a turn based game which uses game center. I do not save any match data locally. While the game goes on, one of the players ends the game and submit score for him self. When the other player launches the game, he gets all matches from the game center (including finished). My problem is, I can not determine for which game I had already submitted the score. For better understanding I list the steps of the scenerio.
Bob starts a match
Alice accepts the match
Alice plays & ends turn
Bob plays & ends turn
...
...
...
Bob ends match & submits his score to leaderboard
Alice launches game and gets from game center 10 finished matches.
Now how do I know, for which matches did I submit the score. As far as I know I can not update the match data, after the match has finished. So I can not save any flag to match data anymore.
Do I something wrong and finish the match too early? Should all players have to wait other players submit their score?
Do I have to save match data locally?
I thought also using last turn date of the match and save locally "last score submit date".
Saving match data or date locally is bad for multiple devices.
Another thing to try:
If you are using Game Center's leaderboards, you could check the context and playerID [1] properties. Then, when a client notices the game G has ended but is unsure if the score is already posted, first download the leaderboard scores for the local playerID from the leaderboard and check if the context is the same as for the just finished game G's matchID.
If not, post the score and leave the matchID as a hint in the context property of the score.
[1] https://developer.apple.com/library/mac/#documentation/GameKit/Reference/GKScore_Ref/Reference/Reference.html#//apple_ref/occ/instm/GKScore/reportScoreWithCompletionHandler:
Every GKTurnBasedMatch has a matchID property. Use this to uniquely identify the game and remember locally if the local user has submitted a score for it yet.
I'd suggest to sync the list of submitted scores via iCloud key-value store to avoid double scores in the high score if the user plays the game on one account but many devices.
I have found a solution after NSSplendid had pointed me the context property. Every time I set the context property of the score timeIntervalSince1970 and I compare the last turn date of the match with it. Actually the GKScore has already the date property, but setting context worked for me better. Because of multiple matches and single player score reports.