<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Thu Feb 08 09:00:11 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>[JAVA-3683] New ObjectId helper with Date and other 8 bytes zeroed</title>
                <link>https://jira.mongodb.org/browse/JAVA-3683</link>
                <project id="10006" key="JAVA">Java Driver</project>
                    <description>&lt;p&gt;The application I work on frequently creates ObjectId&apos;s with &lt;tt&gt;ObjectId.createFromLegacyFormat(int, int, int)&lt;/tt&gt;, always passing as arguments a non-zero &lt;tt&gt;timestamp&lt;/tt&gt;, and then a zero &lt;tt&gt;machine&lt;/tt&gt; and &lt;tt&gt;inc&lt;/tt&gt;. This is useful as a way of performing date range queries by &lt;tt&gt;_id&lt;/tt&gt;. &lt;/p&gt;

&lt;p&gt;E.g., as shell-ish syntax pseudocode:&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;   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;{_id: {$gte: ObjectId(Date(&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;&quot;2020-04-01T00:00:00Z&quot;&lt;/span&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;)), $lt: ObjectId(Date(&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;&quot;2020-04-02T00:00:00Z&quot;&lt;/span&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;))}}&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;With the &lt;a href=&quot;https://github.com/mongodb/mongo-java-driver/blob/3.12.x/bson/src/main/org/bson/types/ObjectId.java#L414-L417&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;deprecation of the &lt;tt&gt;ObjectId.createFromLegacyFormat()&lt;/tt&gt; method&lt;/a&gt; some public non-Deprecated constructors remain that take a &lt;tt&gt;Date&lt;/tt&gt; argument. However, none of these constructors allow for zeroing the other 8 bytes of the ObjectId. Instead, the generated ObjectId&apos;s will have two random values for machine/process:&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-java-driver/blob/3.12.x/bson/src/main/org/bson/types/ObjectId.java#L180-L182&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-java-driver/blob/3.12.x/bson/src/main/org/bson/types/ObjectId.java#L180-L182&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This difference of there being no alternative constructors that allow control of the machine/process bits is there&apos;s now no helper to construct ObjectId&apos;s for my range queries such that I get a deterministic set of results. &lt;/p&gt;

&lt;p&gt;For example, suppose a document exists in my collection that has 4-byte timestamp of exactly Date(&quot;2020-04-01T00:00:00Z&quot;).epochSeconds(), but its process/machine bits are &lt;em&gt;lower&lt;/em&gt; than the process/machine bits of the ObjectId generated for my query. Now my query &lt;em&gt;won&apos;t&lt;/em&gt; return this document. And suppose my query pattern like this repeats as a daily job. Then it will always be non-deterministic whether I in fact end up reading every document, or if sometimes I get &quot;unlucky&quot; and document(s) are missed at the boundary. By contrast, with the &lt;tt&gt;ObjectId.createFromLegacyFormat(Date(&quot;2020-04-01T00:00:00Z&quot;), 0, 0)&lt;/tt&gt; approach, I am guaranteed to deterministically return every document over these adjacent ranges.&lt;/p&gt;

&lt;p&gt;To mention it, there is one more non-Deprecated alternative that would work, just not a convenient one. I could instead switch to using &lt;tt&gt;ObjectId(ByteBuffer)&lt;/tt&gt; where I write my 12 bytes by hand. Certainly doable, but a helper or constructor would be much nicer (especially since one used to exist).&lt;/p&gt;</description>
                <environment></environment>
        <key id="1304713">JAVA-3683</key>
            <summary>New ObjectId helper with Date and other 8 bytes zeroed</summary>
                <type id="2" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14711&amp;avatarType=issuetype">New Feature</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="13201">Fixed</resolution>
                                        <assignee username="jeff.yemin@mongodb.com">Jeffrey Yemin</assignee>
                                    <reporter username="john.morales@mongodb.com">John Morales</reporter>
                        <labels>
                    </labels>
                <created>Sat, 4 Apr 2020 23:04:27 +0000</created>
                <updated>Sat, 28 Oct 2023 11:21:43 +0000</updated>
                            <resolved>Tue, 5 May 2020 17:57:49 +0000</resolved>
                                                    <fixVersion>4.1.0</fixVersion>
                                    <component>BSON</component>
                                        <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="3069953" author="xgen-internal-githook" created="Tue, 5 May 2020 17:57:38 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;Jeff Yemin&apos;, &apos;email&apos;: &apos;jeff.yemin@10gen.com&apos;, &apos;username&apos;: &apos;jyemin&apos;}
&lt;p&gt;Message: Add getSmallestWithDate factory method to ObjectId&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/browse/JAVA-3683&quot; title=&quot;New ObjectId helper with Date and other 8 bytes zeroed&quot; class=&quot;issue-link&quot; data-issue-key=&quot;JAVA-3683&quot;&gt;&lt;del&gt;JAVA-3683&lt;/del&gt;&lt;/a&gt;&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-java-driver/commit/a1a668fd3d44ba32ab61242ea06a8df3eb0c9e23&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-java-driver/commit/a1a668fd3d44ba32ab61242ea06a8df3eb0c9e23&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hw32qf:</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>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </customfields>
    </item>
</channel>
</rss>