Neo4J: Return one random node for every match in list of arguments
I am trying to create a single Cypher query that will return a list of nodes, where each item in the list is a random node from a MATCH query.
For example, I have a list of (Genes) that "reside" at a (Locus).
I want to get one random Gene node for every locus position [0, 1, 2, 3...] and return it as a list.
I've been trying to use this query but it only returns one Gene result, rather than a list of Genes:
WITH [0,1,2] AS locus
UNWIND locus as lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp, g, rand() as r ORDER BY r LIMIT 1
WITH COLLECT(g) as gw, lp
return lp, gw
I am having problems collecting the result of each loop in the UNWIND (second last line), it is only returning one result rather than 3 (as I asked for locus position 0, 1 and 2)
neo4j cypher
add a comment |
I am trying to create a single Cypher query that will return a list of nodes, where each item in the list is a random node from a MATCH query.
For example, I have a list of (Genes) that "reside" at a (Locus).
I want to get one random Gene node for every locus position [0, 1, 2, 3...] and return it as a list.
I've been trying to use this query but it only returns one Gene result, rather than a list of Genes:
WITH [0,1,2] AS locus
UNWIND locus as lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp, g, rand() as r ORDER BY r LIMIT 1
WITH COLLECT(g) as gw, lp
return lp, gw
I am having problems collecting the result of each loop in the UNWIND (second last line), it is only returning one result rather than 3 (as I asked for locus position 0, 1 and 2)
neo4j cypher
add a comment |
I am trying to create a single Cypher query that will return a list of nodes, where each item in the list is a random node from a MATCH query.
For example, I have a list of (Genes) that "reside" at a (Locus).
I want to get one random Gene node for every locus position [0, 1, 2, 3...] and return it as a list.
I've been trying to use this query but it only returns one Gene result, rather than a list of Genes:
WITH [0,1,2] AS locus
UNWIND locus as lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp, g, rand() as r ORDER BY r LIMIT 1
WITH COLLECT(g) as gw, lp
return lp, gw
I am having problems collecting the result of each loop in the UNWIND (second last line), it is only returning one result rather than 3 (as I asked for locus position 0, 1 and 2)
neo4j cypher
I am trying to create a single Cypher query that will return a list of nodes, where each item in the list is a random node from a MATCH query.
For example, I have a list of (Genes) that "reside" at a (Locus).
I want to get one random Gene node for every locus position [0, 1, 2, 3...] and return it as a list.
I've been trying to use this query but it only returns one Gene result, rather than a list of Genes:
WITH [0,1,2] AS locus
UNWIND locus as lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp, g, rand() as r ORDER BY r LIMIT 1
WITH COLLECT(g) as gw, lp
return lp, gw
I am having problems collecting the result of each loop in the UNWIND (second last line), it is only returning one result rather than 3 (as I asked for locus position 0, 1 and 2)
neo4j cypher
neo4j cypher
asked Nov 17 '18 at 16:39
Lobsterman
24315
24315
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Since the limit cuts off the entire stream, use the collection:
WITH [0,1,2] AS locus
UNWIND locus AS lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp,
g ORDER BY rand()
WITH lp,
collect(g)[0..1] AS g // take the first item in the collection
WITH collect(g) AS gw,
lp
RETURN lp,
gw
Thank you so much, this worked perfectly! I was trying to do this for hours to no avail.
– Lobsterman
Nov 17 '18 at 23:35
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53353270%2fneo4j-return-one-random-node-for-every-match-in-list-of-arguments%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Since the limit cuts off the entire stream, use the collection:
WITH [0,1,2] AS locus
UNWIND locus AS lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp,
g ORDER BY rand()
WITH lp,
collect(g)[0..1] AS g // take the first item in the collection
WITH collect(g) AS gw,
lp
RETURN lp,
gw
Thank you so much, this worked perfectly! I was trying to do this for hours to no avail.
– Lobsterman
Nov 17 '18 at 23:35
add a comment |
Since the limit cuts off the entire stream, use the collection:
WITH [0,1,2] AS locus
UNWIND locus AS lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp,
g ORDER BY rand()
WITH lp,
collect(g)[0..1] AS g // take the first item in the collection
WITH collect(g) AS gw,
lp
RETURN lp,
gw
Thank you so much, this worked perfectly! I was trying to do this for hours to no avail.
– Lobsterman
Nov 17 '18 at 23:35
add a comment |
Since the limit cuts off the entire stream, use the collection:
WITH [0,1,2] AS locus
UNWIND locus AS lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp,
g ORDER BY rand()
WITH lp,
collect(g)[0..1] AS g // take the first item in the collection
WITH collect(g) AS gw,
lp
RETURN lp,
gw
Since the limit cuts off the entire stream, use the collection:
WITH [0,1,2] AS locus
UNWIND locus AS lp
MATCH (g:Gene)-[:resides]-(:Locus{position:lp, chromosome_pair: 0})
WITH lp,
g ORDER BY rand()
WITH lp,
collect(g)[0..1] AS g // take the first item in the collection
WITH collect(g) AS gw,
lp
RETURN lp,
gw
answered Nov 17 '18 at 20:19
stdob--
19.2k43148
19.2k43148
Thank you so much, this worked perfectly! I was trying to do this for hours to no avail.
– Lobsterman
Nov 17 '18 at 23:35
add a comment |
Thank you so much, this worked perfectly! I was trying to do this for hours to no avail.
– Lobsterman
Nov 17 '18 at 23:35
Thank you so much, this worked perfectly! I was trying to do this for hours to no avail.
– Lobsterman
Nov 17 '18 at 23:35
Thank you so much, this worked perfectly! I was trying to do this for hours to no avail.
– Lobsterman
Nov 17 '18 at 23:35
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53353270%2fneo4j-return-one-random-node-for-every-match-in-list-of-arguments%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown