mongo-adapter: $type 'array' does not match a field that is an array
Maintainers usually reply within 1 day
@mrityunjay-pandey is already working on this.
Since Oct 30, 2026.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 25/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Stale
- Tech stack
- mongodb, typescript
- Domain
- databases
Research direction
Start at the createPredicateFromFilter entry point in @rocket.chat/mongo-adapter and check how $type: 'array' handles arrays and their elements. Reproduce the issue with the provided examples, including an empty array, and compare the results with the stated MongoDB behavior. Done means both ordinary and empty arrays match while nested arrays continue to behave consistently with MongoDB.
Written by the indexing model from the issue text.
Description
Description:
In @rocket.chat/mongo-adapter (the client-side filter used for local collections), $type: 'array' (or $type: 4) does not match a field that is itself an array. The filter skips the array and only checks its elements, so it matches only arrays nested inside arrays.
MongoDB (3.6 and later) matches any array with { field: { $type: 'array' } }, including an empty one, so the same filter selects different documents on the client and on the server.
Steps to reproduce:
import { createPredicateFromFilter } from '@rocket.chat/mongo-adapter';
const isArray = createPredicateFromFilter({ foo: { $type: 'array' } });
isArray({ foo: [1, 2] }); // false
isArray({ foo: [] }); // false
isArray({ foo: [[1]] }); // true
Expected behavior:
isArray({ foo: [1, 2] }) and isArray({ foo: [] }) return true, as in MongoDB.
Actual behavior:
Both return false.
Server Setup Information:
- Version of Rocket.Chat Server: develop (69a52ce39b)
- Dominant language
- TypeScript
- Stars
- 46.5k
- Forks
- 14.1k
- Avg merge
- 1d 21h
- Merged PRs (30d)
- 381
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from RocketChat/Rocket.Chat
-
Mark the empty state busy while a new search loads, like the table */}Possibly taken @aditya25bcy10173-a11y claimed this 2 days ago. Opentodo type: feature
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
RocketChat/Rocket.Chat#43699 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day
-
Timestamp with a time but no timezone shows as 1 January 1970Possibly taken @Sarthak-agrawal-tech claimed this 4 days ago. Opentype: bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
RocketChat/Rocket.Chat#43637 · 6 comments ·
Maintainers usually reply within 1 day
-
Move this mapping from useQuery's old `select` into a usePaginatedQuery `combine`Possibly taken @aditya25bcy10173-a11y claimed this 3 days ago. Opentodo type: feature
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
RocketChat/Rocket.Chat#43609 · 4 comments · 1 reaction ·
Maintainers usually reply within 1 day
-
evaluate switching to the other tab when the selected tab's permission is revoked mid-sessionPossibly taken @schizophrenicmaniac claimed this 4 days ago. Opentodo type: feature
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
RocketChat/Rocket.Chat#43579 · 3 comments · 1 reaction ·
Maintainers usually reply within 1 day
-
Docs say packages can be installed with `npm` but use unsupported `patch:` URLPossibly taken A pull request linked to this issue is open or already merged. Opentype: bug
Difficulty 1/5 1-3 hours Newbie friendliness 72/100
RocketChat/Rocket.Chat#43554 · 4 comments ·
Maintainers usually reply within 1 day
All issues in RocketChat/Rocket.Chat
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
open-webui/tether#52 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
voidzero-dev/void#835 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
AykutSarac/jsoncrack.com#616 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
melgarafael/DeskcommCRM#4679 ·
Maintainers usually reply within 1 day