fix(mongodb): nested ObjectId(...) / ISODate(...) in MQL reach the server as {$oid} / {$date} maps
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 新手友好度
- 68/100
研究方向
Read lib/features/mongodb/mql_parser.dart to trace how nested Extended JSON wrappers become maps, then inspect mongo_ejson.dart for the existing conversion. Find where the query workspace passes parsed filters and documents, and add tests for nested ObjectId and ISODate values plus strings containing those expressions. Done means the nested values reach the query as BSON ObjectId and DateTime values while matching strings stay strings.
由索引模型根據 Issue 內容生成。
描述
Problem
In the Mongo query workspace, ObjectId(...) and ISODate(...) nested inside a filter or document never become a BSON ObjectId or date:
db.users.find({ _id: ObjectId("5f1d7f0b9d3e2a0017a1b2c3") })
db.events.find({ at: { $gte: ISODate("2026-01-01") } })
db.users.insertOne({ owner: ObjectId("5f1d7f0b9d3e2a0017a1b2c3") })
MqlParser._normalizeJsObject (lib/features/mongodb/mql_parser.dart) turns them into Extended-JSON-shaped maps, {"$oid": "…"} and {"$date": "…"}, and json.decode keeps them as plain maps. Nothing on the MQL path converts them afterwards:
mongo_query_workspace.dartsendsMqlCommand.filter/documentas parsed;mongo_ejson.dart/mongo_field_codec.dart, which do understand$oid, are used by the document views, not here.
So the server receives {_id: {$oid: "…"}}:
- the
findabove matches nothing (or fails with an unknown-operator error, depending on the position); - an insert stores a sub-document
{ $oid: … }instead of an ObjectId.
Only a top-level argument that is itself ObjectId(...) / ISODate(...) is converted (MqlParser._parseRelaxedJson).
Noticed while fixing the normalizer in #1661 (#1513, #1539); not changed there.
Expected
After parsing, walk the filter / update / document / pipeline and convert Extended JSON wrappers into BSON values:
{"$oid": "<24 hex>"}→ObjectId;{"$date": "<ISO>"}→DateTime(UTC);- optionally
{"$numberLong": "…"}.
Reuse the conversion mongo_ejson.dart already has, so the document views and the query workspace agree.
Tests
find({ _id: ObjectId("…") })gives a filter whose_idis anObjectId;- an
ISODateinside$gteis aDateTime; insertOnewith a nestedObjectIdstores anObjectId;- a string that merely contains
ObjectId("…")stays a string.
- 主要語言
- Dart
- 星號
- 23
- 分支
- 1
- 平均合併
- 31 分鐘
- 30 天內合併 PR
- 570
環境準備
在瀏覽器裡用你自己的 GitHub 帳號啟動這個專案的開發容器。
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
QueryaHub/Querya-Desktop 的其他 Issue
-
enhancement ui
難度 2/5 1-3 小時 新手友好度 78/100
QueryaHub/Querya-Desktop#1689 ·
維護者通常 1 天內回覆
-
ui(dialogs): make destructive query and DML preview dialogs adaptive and prevent table name overflow未關閉bug frontend
難度 2/5 1-3 小時 新手友好度 82/100
QueryaHub/Querya-Desktop#1642 ·
維護者通常 1 天內回覆
-
bug error-handling settings
難度 1/5 1-3 小時 新手友好度 78/100
QueryaHub/Querya-Desktop#1637 ·
維護者通常 1 天內回覆
-
enhancement
難度 1/5 1 小時以內 新手友好度 88/100
QueryaHub/Querya-Desktop#1636 ·
維護者通常 1 天內回覆
-
enhancement marketplace
難度 2/5 1-3 小時 新手友好度 78/100
QueryaHub/Querya-Desktop#1635 ·
維護者通常 1 天內回覆
查看 QueryaHub/Querya-Desktop 的全部 Issue
相似的 Issue
-
good-first-issue P3
難度 2/5 1-3 小時 新手友好度 88/100
flutter/dart-intellij-third-party#758 ·
維護者通常 1 天內回覆
-
Bug: Incorrect location coordinates on logged Sound Meter data可能已有人在做 @Jashan32 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 72/100
維護者通常 1 天內回覆
-
area/archive bug
難度 2/5 1-3 小時 新手友好度 76/100
DarkFlippers/qUnleashed#374 ·
維護者通常 1 天內回覆
-
agent:in-progress agent:ready feature P2 · 中 区域: 悬浮窗
難度 2/5 1-3 小時 新手友好度 85/100
ASDW51/DanmuFloat#178 ·
維護者通常 1 天內回覆
-
Missing workouts未關閉enhancement
難度 2/5 1-3 小時 新手友好度 67/100
維護者通常 5 天內回覆