<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 05:08:27 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[SERVER-45308] Alphabetical order of field names used in an $or clause drives evaluation order and thus affects performance</title>
                <link>https://jira.mongodb.org/browse/SERVER-45308</link>
                <project id="10000" key="SERVER">Core Server</project>
                    <description>&lt;h3&gt;&lt;a name=&quot;Synopsis%3A&quot;&gt;&lt;/a&gt;Synopsis:&lt;/h3&gt;
&lt;h3&gt;&lt;a name=&quot;&quot;&gt;&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Because the Query Parser sorts the conditions in a &lt;tt&gt;$or&lt;/tt&gt; clause and then evaluates them in that order, changing the name of the field can affect performance.&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;Detailedexplanation%3A&quot;&gt;&lt;/a&gt;Detailed explanation:&lt;/h3&gt;
&lt;h3&gt;&lt;a name=&quot;&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I created a collection with 200 documents, all in this format:&lt;/p&gt;

&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;  { _id: ObjectId,&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    firstField: true,&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    giantArray: [array of 20,000 members like {ae: intValue}]&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;    lastField: true }&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;

&lt;p&gt; The values for &lt;tt&gt;giantArray.ae&lt;/tt&gt; are random values, but the first 19,999 are all &amp;gt; 17.&lt;br/&gt;
 The last one has value 11.&lt;/p&gt;

&lt;p&gt;Single Condition Tests&lt;br/&gt;
================&lt;br/&gt;
I ran &lt;tt&gt;find(qry).count()&lt;/tt&gt; against the collection, where &lt;tt&gt;qry&lt;/tt&gt; was each of these filters:&lt;br/&gt;
1. {&lt;tt&gt;firstField: true&lt;/tt&gt;}&lt;br/&gt;
2. {&lt;tt&gt;&quot;giantArray.ae&quot;: 11&lt;/tt&gt;}&lt;br/&gt;
3. {&lt;tt&gt;lastField: true&lt;/tt&gt;}&lt;/p&gt;

&lt;p&gt;I ran each query 21 times.  The first time was to warm the cache, and then I recorded how long the next 20 executions took.  All queries used a COLLSCAN as the collection has no indexes beyond the default one on _id, and all scanned all 100 documents.&lt;/p&gt;

&lt;p&gt;Single Test Results:&lt;br/&gt;
==============&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;The equality matches on each of the boolean fields (firstField and lastField) alone both executed 20 times in 8 to 18 milliseconds.&lt;/li&gt;
	&lt;li&gt;The equality match against the nested array field &lt;tt&gt;&quot;giantArray.ae&quot;&lt;/tt&gt; alone was much slower, with 20 executions taking 12,332 milliseconds.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This is not unexpected, as the singleton boolean fields were very fast to test, whereas all 20,000 array members had to be examined to find the one with value 11.&lt;/p&gt;

&lt;p&gt;$or Tests&lt;br/&gt;
=======&lt;br/&gt;
Next I combined the equality tests on the boolean and array fields into $or joined pairs, in both orders (i.e. {&lt;tt&gt;$or: &lt;span class=&quot;error&quot;&gt;&amp;#91;X, Y&amp;#93;&lt;/span&gt;&lt;/tt&gt;} and {&lt;tt&gt;$or: &lt;span class=&quot;error&quot;&gt;&amp;#91;Y, X&amp;#93;&lt;/span&gt;&lt;/tt&gt;}:&lt;/p&gt;
&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt; - {$or: [{firstField: true}, {lastField: true}]}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt; - {$or: [{firstField: true}, {&quot;giantArray.ae&quot;: 11}]}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt; - {$or: [{&quot;giantArray.ae&quot;: 11}, {firstField: true}]}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt; - {$or: [{&quot;giantArray.ae&quot;: 11}, {lastField: true}]}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt; - {$or: [{lastField: true}, {firstField: true}]}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt; - {$or: [{lastField: true}, {&quot;giantArray.ae&quot;: 11}]}&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;

&lt;p&gt;$or Joined Tests Results:&lt;br/&gt;
==================&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Both {&lt;tt&gt;$or: &lt;span class=&quot;error&quot;&gt;&amp;#91;X, Y&amp;#93;&lt;/span&gt;&lt;/tt&gt;} and {&lt;tt&gt;$or: &lt;span class=&quot;error&quot;&gt;&amp;#91;Y, X&amp;#93;&lt;/span&gt;&lt;/tt&gt;} gave roughly the same performance.  This is because the Query Planner sorts the members of the $or set when it parses the query.  You can see this by comparing the input query with the explain().queryPlanner.parsedQuery values: both {&lt;tt&gt;$or: &lt;span class=&quot;error&quot;&gt;&amp;#91;X, Y&amp;#93;&lt;/span&gt;&lt;/tt&gt;} and {&lt;tt&gt;$or: &lt;span class=&quot;error&quot;&gt;&amp;#91;Y, X&amp;#93;&lt;/span&gt;&lt;/tt&gt;} are parsed to {&lt;tt&gt;$or: &lt;span class=&quot;error&quot;&gt;&amp;#91;X, Y&amp;#93;&lt;/span&gt;&lt;/tt&gt;}.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Here the significance of the field names becomes apparent.&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;If {&lt;tt&gt;firstField: true&lt;/tt&gt;} was one of the conditions in the $or, the parser sorted it to be first, and the query executed 20 times in 10 to 24 milliseconds.  This is similar to the time to execute queries with 
{firstField: true}
&lt;p&gt; by itself.&lt;/p&gt;&lt;/li&gt;
	&lt;li&gt;In contrast {&lt;tt&gt;lastField: true&lt;/tt&gt;} paired with {&lt;tt&gt;&quot;giantArray.ae&quot;: 11&lt;/tt&gt;} (in either order) took over 1200 milliseconds, because the parser sorts the condition on the array field to be first.  This is similar to the time to to execute queries with {&lt;tt&gt;&quot;giantArray.ae&quot;: 11&lt;/tt&gt;} by itself.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Conclusion:&lt;br/&gt;
===========&lt;br/&gt;
If the Query Planner did not sort the members of the $or set when it parsed the query, the order of the conditions would affect the order of execution.  However, I believe the sort is required so that functionally identical queries  can be matched to the same cached plan.  &lt;/p&gt;

&lt;p&gt;I do not think there is a backend code change to help with this behaviour, as due to MongoDB&apos;s flexible schema the Query Parser cannot not know which fields are arrays before examining them.  This SERVER ticket might only serve to socument this behaviour, and to pointy out the workaround.&lt;/p&gt;

&lt;p&gt;Workaround:&lt;br/&gt;
=========&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Give array fields names that start late in the alphabet, so that conditions on them get sorted after conditions on simpler fields.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="1066857">SERVER-45308</key>
            <summary>Alphabetical order of field names used in an $or clause drives evaluation order and thus affects performance</summary>
                <type id="4" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14710&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="3">Duplicate</resolution>
                                        <assignee username="charlie.swanson@mongodb.com">Charlie Swanson</assignee>
                                    <reporter username="william.byrne@mongodb.com">William Byrne III</reporter>
                        <labels>
                            <label>qopt-team</label>
                    </labels>
                <created>Fri, 27 Dec 2019 08:31:29 +0000</created>
                <updated>Tue, 7 Jan 2020 18:27:55 +0000</updated>
                            <resolved>Tue, 7 Jan 2020 18:25:38 +0000</resolved>
                                                                    <component>Aggregation Framework</component>
                    <component>Querying</component>
                                        <votes>0</votes>
                                    <watches>11</watches>
                                                                                                                <comments>
                            <comment id="2710322" author="charlie.swanson" created="Tue, 7 Jan 2020 18:27:55 +0000"  >&lt;p&gt;And to further elaborate one point: &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=william.byrne&quot; class=&quot;user-hover&quot; rel=&quot;william.byrne&quot;&gt;william.byrne&lt;/a&gt; is correct that the query planner sorts the predicates for caching purposes, but one could imagine the planner distinguishing between the &quot;canonical&quot; or caching order of the predicates from the actual execution order. This would certainly not be easy to do, but I think other systems have such analysis so  it&apos;s a reasonable request.&lt;/p&gt;</comment>
                            <comment id="2710319" author="charlie.swanson" created="Tue, 7 Jan 2020 18:25:27 +0000"  >&lt;p&gt;Ok I&apos;m going to close this as a duplicate of &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-45364&quot; title=&quot;Query Planner should estimate cost of each predicate&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-45364&quot;&gt;SERVER-45364&lt;/a&gt;. I think that&apos;s the closest in similarity. As &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=bduncan%40visualmining.com&quot; class=&quot;user-hover&quot; rel=&quot;bduncan@visualmining.com&quot;&gt;bduncan@visualmining.com&lt;/a&gt; points out, there are possible changes the server could take to pick a better/more efficient ordering. &lt;/p&gt;

&lt;p&gt;This is definitely related to &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-37530&quot; title=&quot;Provide a way to cause a well-defined order of evaluation for predicates&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-37530&quot;&gt;SERVER-37530&lt;/a&gt; as a workaround if the user knows a better order, so I will also link that.&lt;/p&gt;</comment>
                            <comment id="2709710" author="charlie.swanson" created="Tue, 7 Jan 2020 16:17:32 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=charlie.swanson&quot; class=&quot;user-hover&quot; rel=&quot;charlie.swanson&quot;&gt;charlie.swanson&lt;/a&gt; to read up and make the appropriate number of duplicates.&lt;/p&gt;</comment>
                            <comment id="2691061" author="bduncan@visualmining.com" created="Sun, 29 Dec 2019 21:18:53 +0000"  >&lt;p&gt;This issue is based on one of my support cases.  I believe this issue can be considered a duplicate of &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-37530&quot; title=&quot;Provide a way to cause a well-defined order of evaluation for predicates&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-37530&quot;&gt;SERVER-37530&lt;/a&gt;, just as &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-45123&quot; title=&quot;Queries should not fail with type error when $type provides the correct filter&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-45123&quot;&gt;&lt;del&gt;SERVER-45123&lt;/del&gt;&lt;/a&gt; was.  &lt;a href=&quot;https://jira.mongodb.org/browse/SERVER-37530&quot; title=&quot;Provide a way to cause a well-defined order of evaluation for predicates&quot; class=&quot;issue-link&quot; data-issue-key=&quot;SERVER-37530&quot;&gt;SERVER-37530&lt;/a&gt; talks about short-circuit evaluation in `$and` and relates it to expressions that produce errors, whereas this issue talks about short-circuit evaluation in `$or` and relates it to expressions that have a negative impact on query performance.&lt;/p&gt;

&lt;p&gt;Though &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=william.byrne&quot; class=&quot;user-hover&quot; rel=&quot;william.byrne&quot;&gt;william.byrne&lt;/a&gt; says&lt;/p&gt;
&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; I do not think there is a backend code change to help with this behaviour&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;I would disagree.  You are presumably sorting the elements in order to improve the chances of matching a cached query plan where the sorted query itself is the cache key, and then using the sorted query elements in the actual plan.  There are two possible approaches I can think of here:&lt;/p&gt;

&lt;p&gt;1. Leave the sorting in place, but use ascending operation cost order instead of ascending alphabetical order.  &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=william.byrne&quot; class=&quot;user-hover&quot; rel=&quot;william.byrne&quot;&gt;william.byrne&lt;/a&gt; points out that you do not know if a field is an array or not ahead of time.  To me, that is another way of saying that you don&apos;t know the cost of the operation for a given field.  Mongo could certainly keep a cache of discovered schema information obtained while executing queries (`x` is an array with sizes min-max, `y` is a scalar`, etc), and use it to derive a cost for non-index covered field operations that could then be used for the sorting.&lt;/p&gt;

&lt;p&gt;2. Leave the sorting in place, but only for objects, not an arrays (i.e. the values of the `$and` and `$or` operators).  Yes, this will increase the number of queries that need to have query plans calculated if the queries contain operators with array values that have varying element orders.  However, for customers who can ensure a small cardinality of operator array element orders (such as those generating their queries programmatically) this suggested change would not have a significant negative impact on performance.  Others would encounter a performance hit the first time a new formulation of a query is executed, but not on subsequent executions.  This is not dissimilar to the hit people already deal with related to warming the cache.&lt;/p&gt;
</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                            <outwardlinks description="duplicates">
                                        <issuelink>
            <issuekey id="1076278">SERVER-45364</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                            <outwardlinks description="related to">
                                        <issuelink>
            <issuekey id="616200">SERVER-37530</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="241452" name="orTest.js" size="2601" author="william.byrne@mongodb.com" created="Fri, 27 Dec 2019 08:33:18 +0000"/>
                            <attachment id="241451" name="orTest.out" size="1742" author="william.byrne@mongodb.com" created="Fri, 27 Dec 2019 08:33:18 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                <customfield id="customfield_10050" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname># Replies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18555" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname># of Sprints</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1.0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_13552" key="com.go2group.jira.plugin.crm:crm_generic_field">
                        <customfieldname>Case</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[[5002K00000hwYhAQAU]]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10055" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of 1st Reply</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Sun, 29 Dec 2019 21:18:53 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10052" key="com.atlassian.jira.toolkit:dayslastcommented">
                        <customfieldname>Days since reply</customfieldname>
                        <customfieldvalues>
                                        4 years, 5 weeks, 1 day ago
    
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_18254" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Dependencies</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[]]></customfieldvalue>


                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10057" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comment by Customer</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10056" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last commenter</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>charlie.swanson@mongodb.com</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_11151" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            4 years, 5 weeks, 1 day ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    <customfield id="customfield_10051" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>bduncan@visualmining.com</customfieldvalue>
            <customfieldvalue>charlie.swanson@mongodb.com</customfieldvalue>
            <customfieldvalue>william.byrne@mongodb.com</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_14254" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Product Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hwdadr:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hw1flj:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_23361" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Requested By</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_10557" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="3289">Query 2020-01-13</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10053" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time In Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_22870" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Triagers</customfieldname>
                        <customfieldvalues>
                                

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_14350" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>serverRank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hwcwn3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>