tushar-snow
v1.0.1
Published
A Mongoose-like ODM for Google Drive. Turns Google Drive into a structured document store.
Maintainers
Readme
Snow ❄️
Snow is a lightweight, Mongoose-like ODM (Object Document Mapper) for Google Drive. It allows you to use Google Drive as a structured, serverless document database for your applications.
Note: Snow is designed for structural consistency and ease of use, not high-performance concurrency. It is perfect for CMS backends, personal tools, and low-traffic applications where data ownership and portability are priorities.
Features
- 🍃 Mongoose-like API: Familiar syntax (
find,create,save,schema). - 📄 Structured Storage: Automatically organizes data into folders (Collections) and JSON files (Documents).
- 🔍 Rich Querying: Supports MongoDB-style operators (
$gt,$in,$ne, etc.). - 🛡️ Schema Validation: Enforce types, required fields, and default values.
- ☁️ Serverless: No database server to manage; just your Google Drive.
Installation
npm install snow-dbQuick Start
1. Connect
import snow from 'snow-db';
import credentials from './service-account.json'; // Your Google Service Account
await snow.connect({
name: 'MyDatabase', // The root folder name in Drive
credentials
});2. Define a Model
const User = snow.model('User', {
name: { type: String, required: true },
email: { type: String, required: true },
role: { type: String, default: 'user' },
age: Number,
active: { type: Boolean, default: true },
created_at: { type: Date, default: () => new Date() }
});3. Create & Save
const alice = await User.create({
name: 'Alice',
email: '[email protected]',
age: 28
});
console.log(alice._id); // 'k9s8d7f6...'4. Query & Update
// Find users older than 20
const users = await User.find({ age: { $gt: 20 } });
// Find one and update
const bob = await User.findOne({ email: '[email protected]' });
if (bob) {
bob.role = 'admin';
await bob.save();
}Query Operators
Snow supports a subset of MongoDB query operators:
- Comparison:
$eq,$ne,$gt,$gte,$lt,$lte - Array:
$in,$nin
// Example: Find active admins created after 2023
const admins = await User.find({
role: 'admin',
active: true,
created_at: { $gte: new Date('2023-01-01') }
});Architecture
Snow imposes a strict structure on Google Drive:
MyDatabase/ (Root Folder)
├── User/ (Collection Folder)
│ ├── abc123xyz.json
│ └── def456uvw.json
└── Post/ (Collection Folder)
└── ghi789rst.jsonLicense
MIT
