name: bmob-database-javascript description: "Use when implementing Bmob NoSQL database CRUD with the cross-platform hydrogen-js-sdk (3.0+ supports both Secret Key + API 安全碼 and Application ID + REST API Key init) — ONE SDK file (Bmob-x.x.x.min.js) covers ALL of: browser, Node.js, WeChat Mini Program, Alipay / ByteDance / QQ / Baidu Mini Programs, Quick App 快應用, Cocos Creator JS, Electron, Tauri, hybrid apps, and any ES6 framework (Vue2 / Vue3 / React / Next.js / Vite / Nuxt). Triggers: Bmob.initialize, Bmob.Query, Bmob.User, Bmob.Pointer, Bmob.GeoPoint, Bmob.Relation, hydrogen-js-sdk, npm install hydrogen-js-sdk, import Bmob from 'hydrogen-js-sdk', 微信小程式 Bmob, Cocos Creator Bmob, query.find, query.set, query.save, query.destroy, query.equalTo. NOT for Android native (use bmob-database-android), iOS native (use bmob-database-ios), curl / Python / Go / PHP / C# (use bmob-database-restful), or C++ Cocos2d-x (separate skill). If Bmob MCP is configured in the project, call get_project_tables first via bmob-mcp before writing code." metadata: author: bmob version: "0.1.0" sdk: "hydrogen-js-sdk" sdk_repo: "https://github.com/bmob/hydrogen-js-sdk" docs: "https://github.com/bmob/BmobDocs/blob/master/mds/data/wechat_app_new/index.md" docs_raw: "https://raw.githubusercontent.com/bmob/BmobDocs/master/mds/data/wechat_app_new/index.md" docs_api_ref: "https://raw.githubusercontent.com/bmob/BmobDocs/master/mds/data/javascript/develop_doc.md"
hydrogen-js-sdk 是 同一個 SDK 檔案 Bmob-<version>.min.js 支援以下所有宿主環境,無平臺分支程式碼:
本 skill 只覆蓋新版 hydrogen-js-sdk(
Bmob.Query('X')Promise 風格,3.0+)。基於 Backbone.js 的舊bmob-min.js(Bmob.Object.extend("X")callback 風格)不要用,也不要回退。
1. 初始化支援兩種方式(hydrogen-js-sdk 3.0+ 均相容;按場景二選一,不要混用):
方式 A — Secret Key + API 安全碼(推薦:瀏覽器 / 小程式 / 公開客戶端,SDK 內部走加密授權):
Bmob.initialize("你的Secret Key", "你的API 安全碼");
小蔥技能站7w4.net每天更新,海量AI技能等你發現。
方式 B — Application ID + REST API Key(3.0 起正式相容;適合已有 1.x/2.x 專案遷移、或與服務端 REST 共用同一套 Key):
Bmob.initialize("你的Application ID", "你的REST API Key");
https://api.codenow.cn(見 bmob-database-restful)。2.x 時代方式 B 功能受限;3.0+ 兩種初始化等價可用。公開 bundle 仍優先方式 A(REST API Key 可被抓包)。
2. 不要 commit 真實金鑰進 git;CDN / dist 不要寫死 SDK 版本號。 金鑰用環境變數(Vite import.meta.env.VITE_BMOB_*、Next.js process.env.NEXT_PUBLIC_BMOB_*、小程式構建期注入等)。dist 檔名為 Bmob-<version>.min.js,有打包工具時用 npm install hydrogen-js-sdk;純 CDN 瀏覽器場景用 jsDelivr API 動態取 tags.latest 再拼 URL(見 references/platform-init.md)。禁止在示例裡寫 @2.7.3 這類會過期的具體版本。
3. 預設查詢返回 100 條,最大 1000。需要更多用 skip + limit 分頁或走 BQL(bmob-bql skill)。
4. 三個保留欄位不能手動寫入:objectId、createdAt、updatedAt。讀 objectId 時用 res.objectId(不是 id)。
5. 時間欄位比較的精度:createdAt / updatedAt 在伺服器是微秒精度,應用層做時間比較時要 +1 秒。
Bmob.debug(true) 僅在小程式開發時使用,上線前刪掉。request 合法域名至少新增 https://api.bmobcloud.com(見 references/platform-init.md 微信小程式段)。import Bmob from "hydrogen-js-sdk" 不會生效。bmob-acl-and-roles(P1)。Bmob.User.login 在小程式裡要先呼叫 wx.login() 獲取 code,否則會話拿不到 sessionToken。預設推薦 方式 A(Secret Key + API 安全碼);3.0+ 亦可用 方式 B(Application ID + REST API Key),見上方核心原則。
import Bmob from "hydrogen-js-sdk";
Bmob.initialize("你的Secret Key", "你的API 安全碼");
// 或:Bmob.initialize("你的Application ID", "你的REST API Key");
詳細的 8 種宿主環境引入方式見 references/platform-init.md。
const query = Bmob.Query("GameScore");
query.set("score", 1337);
query.set("playerName", "bmob");
query.set("cheatMode", false);
query.save().then((res) => {
console.log(res.objectId, res.createdAt);
});
const query = Bmob.Query("GameScore");
query.get("7ecd253a25").then((res) => {
console.log(res);
});
const query = Bmob.Query("GameScore");
query.set("id", "7ecd253a25"); // 注意 set("id", objectId)
query.set("score", 9999);
query.save().then((res) => {
console.log(res.updatedAt);
});
const query = Bmob.Query("GameScore");
query.destroy("7ecd253a25").then((res) => {
console.log(res); // { msg: "ok" }
});
const query = Bmob.Query("GameScore");
query.get("7ecd253a25").then((res) => {
res.unset("cover");
res.save();
});
const query = Bmob.Query("GameScore");
query.find().then((res) => {
console.log(res);
});
equalTo(field, op, value),op 可以是 "==" / "!=" / ">" / ">=" / "<" / "<="。
const query = Bmob.Query("GameScore");
query.equalTo("score", ">", 100);
query.equalTo("cheatMode", "==", false); // 多個條件 = AND
query.limit(20);
query.skip(0);
query.order("-score"); // 降序
query.find().then(console.log);
const query = Bmob.Query("GameScore");
const q1 = query.equalTo("score", ">", 150);
const q2 = query.equalTo("score", "<", 5);
query.or(q1, q2);
query.find().then(console.log);
const query = Bmob.Query("Post");
query.select("title");
query.find().then(console.log);
query.containedIn("playerName", ["Bmob", "Codenow", "JS"]);
query.notContainedIn("playerName", ["spam"]);
query.exists("score"); // 含此欄位
query.doesNotExist("score"); // 不含此欄位
const query = Bmob.Query("diary");
query.count().then((n) => console.log(`共 ${n} 條`));
query.count(100).then((arr) => console.log("最多返回 100 條記錄資料 + count"));
const query = Bmob.Query("Post");
query.get("objectId").then((res) => {
res.increment("likes"); // +1
res.increment("likes", 5); // +5(支援負數)
res.save();
});
const query = Bmob.Query("Diary");
query.add("DiaryType", ["public"]); // 末尾追加
query.addUnique("DiaryType", ["secret"]); // 去重追加
query.save();
query.get("objectId").then((res) => {
res.remove("DiaryType", ["secret"]); // 刪除元素
res.save();
});
| 主題 | 路徑 |
|---|---|
| 8 種宿主環境的初始化差異(瀏覽器 / Node / 微信/支付寶/位元組/QQ/百度小程式 / 快應用 / Cocos Creator / Electron) | references/platform-init.md |
| Pointer / Relation 一對多 / 多對多 | references/pointer-and-relation.md |
複雜子查詢($inQuery / $notInQuery)、模糊查詢、地理位置查詢 |
references/query.md |
| 即時資料訂閱(僅小程式 / Web)+ WebSocket | references/realtime.md |
| 批次操作(≤ 50) | references/batch.md |
如果使用者在 IDE 裡配置了 Bmob MCP,寫程式碼前先呼叫 get_project_tables 拿到真實 schema,避免:
{"__type":"Pointer","className":"X","objectId":"..."})sequenceDiagram
autonumber
participant Dev as Developer
participant Agent as Agent
participant MCP as bmob-mcp
participant Code as bmob-database-javascript
Dev->>Agent: "Next.js 專案里加 Bmob 文章列表"
Agent->>MCP: get_project_tables()
MCP-->>Agent: {Article: {title:String, content:String, author:Pointer(_User)}}
Agent->>Code: 按真實 schema 生成 Bmob.Query("Article") 程式碼
Code-->>Dev: 完整可執行程式碼(含 ACL 提示)
| 現象 | 排查 |
|---|---|
Bmob is undefined |
沒引入 SDK;或 Node.js 用了壓縮版(必須用原始碼 require('hydrogen-js-sdk/src/lib/app.js')) |
| 初始化報 401 | 方式 A:Secret Key 或 API 安全碼與控制台不一致;方式 B:Application ID 或 REST API Key 錯;或兩種方式的引數混用(例如用 Application ID 當 Secret Key 傳) |
| 寫入成功但欄位值不見 | 欄位名拼錯(schemaless 不報錯);先 get_project_tables 比對 |
| 查詢返回資料少 | 預設 100 條上限;用 query.limit(1000) 或分頁 |
set("id", ...) 沒生效 |
更新時必須用 set("id", objectId)(不是 set("objectId", ...)) |
| 時間範圍查詢少一條 | 服務端時間是微秒精度,區間右端 +1 秒 |
| 小程式請求失敗 | 先檢查微信後臺 request 合法域名是否已新增 https://api.bmobcloud.com;若 SDK 是 npm 引入,還要在微信開發者工具執行“工具 --> 構建 npm”後再編譯執行 |
| Promise 一直 pending | 呼叫了不存在的方法名(hydrogen 不拋錯只掛起);對照 完整 API |
| 9015 報錯 | 見 bmob-error-codes 的 9015 專題 |
bmob-error-codesbmob-mcp這個 Skill 質量較好,內容覆蓋全面,從基礎到高階操作都有涉及,程式碼示例清晰,坑點提示實用,適合需要使用 Bmob 資料庫的開發者參考。主要不足是部分高階功能講解較淺,缺少常見錯誤處理指導,整體文件可以再豐富一些。總體而言,這是一個實用性強、結構規範的資料庫操作指南。